def test_string_format(self): STRING_FORMAT = '''{ "Name": "name", "Levelno": "levelno", "Levelname": "levelname", "Pathname": "pathname", "Filename": "filename", "Module": "module", "Lineno": "lineno", "FuncName": "funcName", "Created": "created", "Asctime": "asctime", "Msecs": "msecs", "RelativeCreated": "relativeCreated", "Thread": "thread", "ThreadName": "threadName", "Process": "process", "Message": "message" }''' root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter(STRING_FORMAT, datefmt) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info("test %s format", 'string')
def test_ordered_dict_format(self): ORDERED_DICT_FORMAT = OrderedDict([ ("name", "name"), ("levelno", "levelno"), ("levelname", "levelname"), ("pathname", "pathname"), ("filename", "filename"), ("module", "module"), ("lineno", "lineno"), ("funcName", "funcName"), ("created", "created"), ("asctime", "asctime"), ("msecs", "msecs"), ("relativeCreated", "relativeCreated"), ("thread", "thread"), ("threadName", "threadName"), ("process", "process"), ("message", "message") ]) root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter(ORDERED_DICT_FORMAT, datefmt) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info("test %s format", 'ordered dict')
def test_record_custom_attrs_with_kwargs(self): def _new_custom_attribute_status(**record_attrs): if record_attrs['levelname'] in ['ERROR', 'CRITICAL']: return 'failed' else: return 'success' RECORD_CUSTOM_ATTRS = { 'status': _new_custom_attribute_status, } RECORD_CUSTOM_FORMAT = OrderedDict([ ("status", "status"), # new custom attribute ("log", "message") ]) root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter( RECORD_CUSTOM_FORMAT, record_custom_attrs=RECORD_CUSTOM_ATTRS ) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test record custom attrs with kwargs') root.error('test record custom attrs with kwargs')
def test_dict_format(self): DICT_FORMAT = { "name": "name", "levelno": "levelno", "levelname": "levelname", "pathname": "pathname", "filename": "filename", "module": "module", "lineno": "lineno", "funcName": "funcName", "created": "created", "asctime": "asctime", "msecs": "msecs", "relativeCreated": "relativeCreated", "thread": "thread", "threadName": "threadName", "process": "process", "message": "message" } root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter(DICT_FORMAT, datefmt) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info("test %s format", 'dict')
def test_format_style(self): FORMT_STYLE = { "name": "name", "levelno": "levelno", "levelname": "levelname", "pathname": "pathname", "filename": "filename", "module": "module", "lineno": "lineno", "funcName": "funcName", "created": "created", "asctime": "asctime", "msecs": "msecs", "relativeCreated": "relativeCreated", "thread": "thread", "threadName": "threadName", "process": "process", "message": "{message}" } root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter(FORMT_STYLE, datefmt, '{') sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info("test %s style", 'format')
def __apply_json_formatter(self): """ changes json log format for all handlers with JsonFormatter """ formatter = JsonFormatter(CUSTOM_FORMAT, record_custom_attrs=RECORD_CUSTOM_ATTRS, separators=(',', ':'), mix_extra=True) for handler in self.__logger.parent.handlers: if isinstance(handler.formatter, JsonFormatter): handler.setFormatter(formatter)
def test_mix_extra_multi_formatter(self): root = logging.getLogger() root.setLevel(logging.INFO) fh = logging.FileHandler('jsonformatter.log') formatter = JsonFormatter(ensure_ascii=False, mix_extra=True, indent=4) fh.setFormatter(formatter) fh.setLevel(logging.INFO) root.addHandler(fh) sh = logging.StreamHandler() formatter = JsonFormatter(ensure_ascii=False, mix_extra=True, indent=4) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test mix extra multi formatter', extra={'extra': 'extra content'})
def set_warning_to_all_loggers_except(logger_name): formatter = JsonFormatter(STRING_FORMAT) sh = logging.StreamHandler(stream=sys.stdout) for name in logging.root.manager.loggerDict: if name not in logger_name: logger = logging.getLogger(name) sh.setFormatter(formatter) logger.addHandler(sh) logger.setLevel(logging.WARNING)
def test_mix_extra(self): root = logging.getLogger() root.setLevel(logging.INFO) sh = logging.StreamHandler() formatter = JsonFormatter(ensure_ascii=False, mix_extra=True, indent=4) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test mix extra in fmt', extra={'extra': 'extra content'})
def get_logger(name): root_logger = logging.getLogger(name) root_logger.setLevel(logging.DEBUG) formatter = JsonFormatter(STRING_FORMAT) sh = logging.StreamHandler() sh.setFormatter(formatter) sh.setLevel(logging.DEBUG) root_logger.addHandler(sh) return root_logger
def handler(level: Union[SupportsInt, Text] = INFO) -> Logger: fmt = OrderedDict(( ("Name", "name"), ("Asctime", "asctime"), ("LevelName", "levelname"), ("Message", "message"), )) formatter = JsonFormatter(fmt, mix_extra=True, default=converter) handler = StreamHandler(stderr) handler.setLevel(level) handler.setFormatter(formatter) return handler
def test_mix_extra_position_is_mix(self): root = logging.getLogger() root.setLevel(logging.INFO) sh = logging.StreamHandler() formatter = JsonFormatter( ensure_ascii=False, encoding='gbk', mix_extra=True, mix_extra_position='mix', indent=4) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test mix extra position is mix', extra={'extra': 'extra content'})
def test_template_style_unicode(self): root = logging.getLogger() root.setLevel(logging.INFO) formatter = JsonFormatter("""{"log":"${message}"}""", style="$", encoding='gbk', ensure_ascii=False) sh = logging.StreamHandler() sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test template style unicode: %s', '中文')
def test_json_dumps_parameter_ensure_ascii_false(self): root = logging.getLogger() root.setLevel(logging.INFO) sh = logging.StreamHandler() formatter = JsonFormatter(ensure_ascii=False, encoding='gbk') sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test json dumps parameter `ensure_ascii` False: ����')
def test_percent_style_unicode(self): root = logging.getLogger() root.setLevel(logging.INFO) formatter = JsonFormatter( """{"log":"%(message)s"}""", style="%", encoding='gbk', ensure_ascii=False) sh = logging.StreamHandler() sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test percent style unicode: %s', '����')
def test_default_config(self): root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter() sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info("test %s config", 'default')
def test_string_config(self): root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter(STRING_FORMAT, datefmt) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info("test %s format", 'string')
def test_ordered_dict_config(self): root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter(ORDERED_DICT_FORMAT, datefmt) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info("test dict format")
def test_multi_handlers(self): root = logging.getLogger() root.setLevel(logging.INFO) sh = logging.StreamHandler() formatter = JsonFormatter(ensure_ascii=False, encoding='gbk') sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) sh = logging.StreamHandler() formatter = JsonFormatter(ensure_ascii=False, encoding='gbk') sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) sh = logging.StreamHandler() formatter = logging.Formatter('%(message)s') sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test multi handlers')
def test_indent(self): root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter(ORDERED_DICT_FORMAT, datefmt, indent=4) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test indent')
def test_json_dumps_parameter_indent(self): root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter(indent=4) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test json dumps parameter `index`: 4')
def test_log_exception(self): root = logging.getLogger() root.setLevel(logging.INFO) sh = logging.StreamHandler() formatter = JsonFormatter() sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) try: 1 / 0 except Exception as e: root.exception('test log exception')
def test_log_exception(self): root = logging.getLogger() root.setLevel(logging.INFO) datefmt = '%Y-%m-%d %H:%M:%S' sh = logging.StreamHandler() formatter = JsonFormatter(ORDERED_DICT_FORMAT, datefmt) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) try: 1 / 0 except Exception as e: root.exception('test log exception')
def test_ensure_ascii_false(self): root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter(ORDERED_DICT_FORMAT, datefmt, ensure_ascii=False) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test ensure ascii false: 中文')
def test_multi_value_in_one_key(self): root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter(MULTI_VALUE_FORMAT, datefmt, record_custom_attrs=RECORD_CUSTOM_ATTRS) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test multi value in one key')
def get_log(get_function_name, logging_level=logging.DEBUG): time = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S") logger_name = get_function_name test_logger = logging.getLogger(logger_name) formatter = JsonFormatter(STRING_FORMAT) sh = logging.StreamHandler(stream=sys.stdout) sh.setFormatter(formatter) test_logger.addHandler(sh) test_logger.setLevel(logging_level) test_logger.info("*"*41 + 'TEST_SETUP' + "*"*40) test_logger.info("initializing setUp operations for test {} at ".format(get_function_name, time)) set_warning_to_all_loggers_except(logger_name) yield test_logger test_logger.info("ending logging for test for function {}".format(get_function_name))
def test_record_custom_attrs(self): root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter(RECORD_CUSTOM_FORMAT, datefmt, record_custom_attrs=RECORD_CUSTOM_ATTRS) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test record custom attrs')
def test_multi_value_in_one_key(self): MULTI_VALUE_FORMAT = { "multi value": "%(name)s - %(levelno)s - %(levelname)s - %(pathname)s - %(filename)s - %(module)s - %(lineno)d - %(funcName)s - %(created)f - %(asctime)s - %(msecs)d - %(relativeCreated)d - %(thread)d - %(threadName)s - %(process)d - %(message)s" } root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter( MULTI_VALUE_FORMAT, datefmt) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test multi value in one key')
def test_record_custom_attrs(self): RECORD_CUSTOM_ATTRS = { 'asctime': lambda: datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S.%f'), 'user id': lambda: str(random.random())[2:10] } RECORD_CUSTOM_FORMAT = OrderedDict([ ("user id", "user id"), # new custom attrs ("name", "name"), ("levelno", "levelno"), ("levelname", "levelname"), ("pathname", "pathname"), ("filename", "filename"), ("module", "module"), ("lineno", "lineno"), ("funcName", "funcName"), ("created", "created"), ("asctime", "asctime"), # use custom format replace default. ("msecs", "msecs"), ("relativeCreated", "relativeCreated"), ("thread", "thread"), ("threadName", "threadName"), ("process", "process"), ("message", "message") ]) root = logging.getLogger() root.setLevel(logging.INFO) datefmt = None sh = logging.StreamHandler() formatter = JsonFormatter(RECORD_CUSTOM_FORMAT, datefmt, record_custom_attrs=RECORD_CUSTOM_ATTRS) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info('test record custom attrs')
def test_mix_extra(self): root = logging.getLogger() root.setLevel(logging.INFO) sh = logging.StreamHandler() formatter = JsonFormatter( ensure_ascii=False, encoding='gbk', mix_extra=True, indent=4) sh.setFormatter(formatter) sh.setLevel(logging.INFO) root.addHandler(sh) root.info( 'test mix extra in fmt', extra={ 'extra1': 'extra content 1', 'extra2': 'extra content 2' }) root.info( 'test mix extra in fmt', extra={ 'extra3': 'extra content 3', 'extra4': 'extra content 4' })