~crossbar/crossbar/trunk

« back to all changes in this revision

Viewing changes to crossbar/_logging.py

  • Committer: Tobias Oberstein
  • Date: 2015-08-08 17:33:16 UTC
  • mfrom: (768.1.43)
  • Revision ID: git-v1:d3b417ac7448176393afb2435b1d90669b6e629d
Merge pull request #380 from hawkowl/clitests

Test the CLI + make sure file logging actually works (especially on Py3) + make the CLI logger start on all functions

Show diffs side-by-side

added added

removed removed

Lines of Context:
121
121
 
122
122
def make_stdout_observer(levels=(LogLevel.info, LogLevel.debug),
123
123
                         show_source=False, format="colour", trace=False,
124
 
                         _file=_stdout):
 
124
                         _file=None):
125
125
    """
126
126
    Create an observer which prints logs to L{sys.stdout}.
127
127
    """
 
128
    if _file is None:
 
129
        _file = _stdout
 
130
 
128
131
    @provider(ILogObserver)
129
132
    def StandardOutObserver(event):
130
133
 
158
161
                formatTime(event["log_time"]), logSystem, formatEvent(event))
159
162
        elif format == "syslogd":
160
163
            eventString = SYSLOGD_FORMAT.format(logSystem, formatEvent(event))
 
164
        elif format == "none":
 
165
            eventString = formatEvent(event)
 
166
        else:
 
167
            assert False
161
168
 
162
169
        print(eventString, file=_file)
163
170
 
167
174
def make_stderr_observer(levels=(LogLevel.warn, LogLevel.error,
168
175
                                 LogLevel.critical),
169
176
                         show_source=False, format="colour",
170
 
                         _file=_stderr):
 
177
                         _file=None):
171
178
    """
172
179
    Create an observer which prints logs to L{sys.stderr}.
173
180
    """
 
181
    if _file is None:
 
182
        _file = _stderr
 
183
 
174
184
    @provider(ILogObserver)
175
185
    def StandardErrorObserver(event):
176
186
 
204
214
                formatTime(event["log_time"]), logSystem, eventText)
205
215
        elif format == "syslogd":
206
216
            eventString = SYSLOGD_FORMAT.format(logSystem, eventText)
 
217
        elif format == "none":
 
218
            eventString = formatEvent(event)
 
219
        else:
 
220
            assert False
207
221
 
208
222
        print(eventString, file=_file)
209
223
 
261
275
    return _make_json
262
276
 
263
277
 
264
 
def make_legacy_daily_logfile_observer(path):
265
 
    """
266
 
    Make a L{DefaultSystemFileLogObserver}.
267
 
    """
268
 
    from crossbar.twisted.processutil import DefaultSystemFileLogObserver
269
 
    from twisted.logger import LegacyLogObserverWrapper
270
 
    from twisted.python.logfile import DailyLogFile
271
 
 
272
 
    logfd = DailyLogFile.fromFullPath(os.path.join(path,
273
 
                                                   'node.log'))
274
 
    flo = LegacyLogObserverWrapper(
275
 
        DefaultSystemFileLogObserver(logfd,
276
 
                                     system="{:<10} {:>6}".format(
277
 
                                         "Controller", os.getpid())).emit)
278
 
 
279
 
    return flo
 
278
def make_logfile_observer(path, show_source=False):
 
279
    """
 
280
    Make an observer that writes out to C{path}.
 
281
    """
 
282
    from twisted.logger import FileLogObserver
 
283
 
 
284
    f = open(path, "w")
 
285
 
 
286
    def _render(event):
 
287
 
 
288
        if event.get("log_system", u"-") == u"-":
 
289
            logSystem = u"{:<10} {:>6}".format("Controller", os.getpid())
 
290
        else:
 
291
            logSystem = event["log_system"]
 
292
 
 
293
        if show_source and event.get("log_namespace") is not None:
 
294
            logSystem += " " + event.get("cb_namespace", event.get("log_namespace", ''))
 
295
 
 
296
        if event.get("log_format", None) is not None:
 
297
            eventText = formatEvent(event)
 
298
        else:
 
299
            eventText = ""
 
300
 
 
301
        if "log_failure" in event:
 
302
            # This is a traceback. Print it.
 
303
            eventText = eventText + event["log_failure"].getTraceback()
 
304
 
 
305
        eventString = NOCOLOUR_FORMAT.format(
 
306
            formatTime(event["log_time"]), logSystem, eventText) + os.linesep
 
307
 
 
308
        return eventString
 
309
 
 
310
    return FileLogObserver(f, _render)
280
311
 
281
312
 
282
313
class CrossbarLogger(object):
346
377
        self._setlog_level = level
347
378
 
348
379
 
349
 
def make_logger(log_level=None, logger=Logger, observer=log_publisher):
 
380
def make_logger(log_level=None, logger=Logger, observer=None):
350
381
    """
351
382
    Make a new logger (of the type set by the kwarg logger) that publishes to
352
383
    the observer set in the observer kwarg. If no explicit log_level is given,
353
384
    it uses the current global log level.
354
385
    """
 
386
    if observer is None:
 
387
        observer = log_publisher
 
388
 
355
389
    # Get the caller's frame
356
390
    cf = currentframe(1)
357
391