def test_groups(logger): def inject_extra(record): record.extra['foo'] = 'bar' group = logbook.LoggerGroup(processor=inject_extra) group.level = logbook.ERROR group.add_logger(logger) with logbook.TestHandler() as handler: logger.warn('A warning') logger.error('An error') assert (not handler.has_warning('A warning')) assert handler.has_error('An error') assert handler.records[0].extra['foo'] == 'bar'
def test_groups(self): def inject_extra(record): record.extra['foo'] = 'bar' group = logbook.LoggerGroup(processor=inject_extra) group.level = logbook.ERROR group.add_logger(self.log) handler = logbook.TestHandler() with handler: self.log.warn('A warning') self.log.error('An error') self.assert_(not handler.has_warning('A warning')) self.assert_(handler.has_error('An error')) self.assertEqual(handler.records[0].extra['foo'], 'bar')
def test_reflected_properties(logger): group = logbook.LoggerGroup() group.add_logger(logger) assert logger.group == group group.level = logbook.ERROR assert logger.level == logbook.ERROR assert logger.level_name == 'ERROR' group.level = logbook.WARNING assert logger.level == logbook.WARNING assert logger.level_name == 'WARNING' logger.level = logbook.CRITICAL group.level = logbook.DEBUG assert logger.level == logbook.CRITICAL assert logger.level_name == 'CRITICAL' group.remove_logger(logger) assert logger.group is None
def test_reflected_properties(self): group = logbook.LoggerGroup() group.add_logger(self.log) self.assertEqual(self.log.group, group) group.level = logbook.ERROR self.assertEqual(self.log.level, logbook.ERROR) self.assertEqual(self.log.level_name, 'ERROR') group.level = logbook.WARNING self.assertEqual(self.log.level, logbook.WARNING) self.assertEqual(self.log.level_name, 'WARNING') self.log.level = logbook.CRITICAL group.level = logbook.DEBUG self.assertEqual(self.log.level, logbook.CRITICAL) self.assertEqual(self.log.level_name, 'CRITICAL') group.remove_logger(self.log) self.assertEqual(self.log.group, None)
"user_log", "system_log", "user_system_log", ] DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S.%f" def user_log_processor(record): from rqalpha.environment import Environment time = Environment.get_instance().calendar_dt if time is not None: record.time = time user_log_group = logbook.LoggerGroup(processor=user_log_processor) # loggers # 用户代码logger日志 user_log = Logger("user_log") # 给用户看的系统日志 user_system_log = Logger("user_system_log") user_log_group.add_logger(user_log) user_log_group.add_logger(user_system_log) # 系统日志 system_log = Logger("system_log") def init_logger():
# # MIT License # # Copyright (c) 2018 WillQ # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # import logbook core_log_group = logbook.LoggerGroup()
import os import sys import logbook from logbook.more import ColorizedStderrHandler from logbook.handlers import StringFormatterHandlerMixin import google.cloud.logging from kryptos.settings import LOG_DIR, CLOUD_LOGGING logger_group = logbook.LoggerGroup() # logger_group.level = logbook.INFO logbook.set_datetime_format("utc") cloud_client = google.cloud.logging.Client() APP_LOG = os.path.join(LOG_DIR, "app.log") ERROR_LOG = os.path.join(LOG_DIR, "error.log") def add_logger(logger, *handlers): logger.handlers.extend(handlers) logger_group.add_logger(logger) class GoogleCloudHandler(logbook.Handler, StringFormatterHandlerMixin): def __init__(self, level=0, filter=None, bubble=False, format_string=None): logbook.Handler.__init__(self, level, filter, bubble) StringFormatterHandlerMixin.__init__(self, format_string)
def _LoggerGroup(): group = logbook.LoggerGroup() group.disabled = True return group
def test_group_disabled(): group = logbook.LoggerGroup() logger1 = logbook.Logger('testlogger1') logger2 = logbook.Logger('testlogger2') group.add_logger(logger1) group.add_logger(logger2) # Test group disable group.disable() with logbook.TestHandler() as handler: logger1.warn('Warning 1') logger2.warn('Warning 2') assert not handler.has_warnings # Test group enable group.enable() with logbook.TestHandler() as handler: logger1.warn('Warning 1') logger2.warn('Warning 2') assert handler.has_warning('Warning 1') assert handler.has_warning('Warning 2') # Test group disabled, but logger explicitly enabled group.disable() logger1.enable() with logbook.TestHandler() as handler: logger1.warn('Warning 1') logger2.warn('Warning 2') assert handler.has_warning('Warning 1') assert not handler.has_warning('Warning 2') # Logger 1 will be enabled by using force=True group.disable(force=True) with logbook.TestHandler() as handler: logger1.warn('Warning 1') logger2.warn('Warning 2') assert not handler.has_warning('Warning 1') assert not handler.has_warning('Warning 2') # Enabling without force means logger 1 will still be disabled. group.enable() with logbook.TestHandler() as handler: logger1.warn('Warning 1') logger2.warn('Warning 2') assert not handler.has_warning('Warning 1') assert handler.has_warning('Warning 2') # Force logger 1 enabled. group.enable(force=True) with logbook.TestHandler() as handler: logger1.warn('Warning 1') logger2.warn('Warning 2') assert handler.has_warning('Warning 1') assert handler.has_warning('Warning 2')