def injectLogger(use_syslog = True, log_file = None, verbose = False, capture_output = True, twisted_error_log_level = ERROR, twisted_info_log_level = INFO): logger = logging.getLogger('') formatter = BTLFormatter("%(asctime)s - %(name)s - %(process)d - " "%(levelname)s - %(message)s") if log_file is not None: lf_handler = logging.handlers.RotatingFileHandler(filename=log_file, mode='a', maxBytes=2**27, backupCount=10) lf_handler.setFormatter(formatter) logger.setLevel(logging.DEBUG) logger.addHandler(lf_handler) if use_syslog: SysLogHandler = logging.handlers.SysLogHandler sl_handler = SysLogHandler('/dev/log', facility=SysLogHandler.LOG_LOCAL0) #address = (SYSLOG_HOST, SYSLOG_PORT)) # namespace - pid - level - message sl_handler.setFormatter(BTLFormatter("%(name)s - %(process)d - " "%(levelname)s - %(message)s")) logger.setLevel(logging.DEBUG) logger.addHandler(sl_handler) if verbose: so_handler = logging.StreamHandler(sys.stdout) so_handler.setFormatter(formatter) logger.setLevel(logging.DEBUG) logger.addHandler(so_handler) twisted_logger.start(capture_output = capture_output, error_log_level = twisted_error_log_level, info_log_level = twisted_info_log_level)
def injectLogger(use_syslog=True, log_file=None, verbose=False, capture_output=True, twisted_error_log_level=ERROR, twisted_info_log_level=INFO, capture_stderr_log_level=ERROR, capture_stdout_log_level=INFO, capture_stderr_name='stderr', capture_stdout_name='stdout', log_level=DEBUG, log_twisted=True): """ Installs logging. @param use_syslog: log to syslog. use_syslog, log_file, and verbose are not mutually exclusive. @param log_file: log to a file. @param verbose: output logs to stdout. Setting verbose and capture_output to this function does NOT result in an infinite loop. @param capture_output: redirects stdout and stderr to the logger. Be careful. This can create infinite loops with loggers that output to stdout or stderr. @param twisted_error_log_level: log level for errors reported by twisted. @param twisted_info_log_level: log level for non-errors reported by twisted. If capture_output is set then this is also the log level for anything output to stdout or stderr. @param log_level: only log events that have level >= passed level are logged. This is achieved by setting the log level in each of the installed handlers. @param capture_stderr_log_level: log level for output captured from stdout. @param capture_stdout_log_level: log level for output captured from stderr. @param capture_stderr_name: log name used for stderr. 'name' refers to the name arg passed to logging.getLogger(name). @param capture_stdout_name: log name used for stdout. Analogous to capture_stderr_name. """ logger = logging.getLogger('') logger.setLevel( DEBUG) # we use log handler levels to control output level. formatter = BTLFormatter("%(asctime)s - %(name)s - %(process)d - " "%(levelname)s - %(message)s") if log_file is not None: lf_handler = logging.handlers.RotatingFileHandler(filename=log_file, mode='a', maxBytes=2**27, backupCount=10) lf_handler.setFormatter(formatter) lf_handler.setLevel(log_level) logger.addHandler(lf_handler) if use_syslog: sl_handler = SysLogHandler('/dev/log', facility=SysLogHandler.LOG_LOCAL0) #address = (SYSLOG_HOST, SYSLOG_PORT)) # namespace - pid - level - message sl_handler.setFormatter( BTLFormatter("%(name)s - %(process)d - " "%(levelname)s - %(message)s")) sl_handler.setLevel(log_level) logger.addHandler(sl_handler) if verbose: # StreamHandler does not capture stdout, it directs output from # loggers to stdout. so_handler = logging.StreamHandler(sys.stdout) so_handler.setFormatter(formatter) so_handler.setLevel(log_level) logger.addHandler(so_handler) if capture_output: sys.stdout = StdioPretender(capture_stdout_name, capture_stdout_log_level) sys.stderr = StdioPretender(capture_stderr_name, capture_stderr_log_level) if log_twisted: twisted_logger.start(error_log_level=twisted_error_log_level, info_log_level=twisted_info_log_level)
def injectLogger(use_syslog = True, log_file = None, verbose = False, capture_output = True, twisted_error_log_level = ERROR, twisted_info_log_level = INFO, capture_stderr_log_level = ERROR, capture_stdout_log_level = INFO, capture_stderr_name = 'stderr', capture_stdout_name = 'stdout', log_level = DEBUG, log_twisted = True ): """ Installs logging. @param use_syslog: log to syslog. use_syslog, log_file, and verbose are not mutually exclusive. @param log_file: log to a file. @param verbose: output logs to stdout. Setting verbose and capture_output to this function does NOT result in an infinite loop. @param capture_output: redirects stdout and stderr to the logger. Be careful. This can create infinite loops with loggers that output to stdout or stderr. @param twisted_error_log_level: log level for errors reported by twisted. @param twisted_info_log_level: log level for non-errors reported by twisted. If capture_output is set then this is also the log level for anything output to stdout or stderr. @param log_level: only log events that have level >= passed level are logged. This is achieved by setting the log level in each of the installed handlers. @param capture_stderr_log_level: log level for output captured from stdout. @param capture_stdout_log_level: log level for output captured from stderr. @param capture_stderr_name: log name used for stderr. 'name' refers to the name arg passed to logging.getLogger(name). @param capture_stdout_name: log name used for stdout. Analogous to capture_stderr_name. """ logger = logging.getLogger('') logger.setLevel(DEBUG) # we use log handler levels to control output level. formatter = BTLFormatter("%(asctime)s - %(name)s - %(process)d - " "%(levelname)s - %(message)s") if log_file is not None: lf_handler = logging.handlers.RotatingFileHandler(filename=log_file, mode='a', maxBytes=2**27, backupCount=10) lf_handler.setFormatter(formatter) lf_handler.setLevel(log_level) logger.addHandler(lf_handler) if use_syslog: sl_handler = SysLogHandler('/dev/log', facility=SysLogHandler.LOG_LOCAL0) #address = (SYSLOG_HOST, SYSLOG_PORT)) # namespace - pid - level - message sl_handler.setFormatter(BTLFormatter("%(name)s - %(process)d - " "%(levelname)s - %(message)s")) sl_handler.setLevel(log_level) logger.addHandler(sl_handler) if verbose: # StreamHandler does not capture stdout, it directs output from # loggers to stdout. so_handler = logging.StreamHandler(sys.stdout) so_handler.setFormatter(formatter) so_handler.setLevel(log_level) logger.addHandler(so_handler) if capture_output: sys.stdout = StdioPretender( capture_stdout_name, capture_stdout_log_level ) sys.stderr = StdioPretender( capture_stderr_name, capture_stderr_log_level ) if log_twisted: twisted_logger.start(error_log_level = twisted_error_log_level, info_log_level = twisted_info_log_level)