多个模块的log日志输出

    xiaoxiao2025-05-25  8

    今天研究了一下python标准库中的logging模块,在多个模块的情景下输出日志

    import logging from logging_test2 import log_test # logging.basicConfig(filename='log_example.log', # level=logging.DEBUG, # filemode='w', # ) # logging.debug('This message should go to the log file') # logging.info('So should this') # logging.warning('And this,too') logger = logging.getLogger('test') logger.setLevel(logging.DEBUG) fh = logging.FileHandler('log_example_2.log',mode='a',encoding='utf-8') fh.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.ERROR) formatter = logging.Formatter('%(asctime)s: %(levelname)s %(name)s %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter) logger.addHandler(fh) # logger.addHandler(ch) logger.info('This is a info message') log_test() logger.critical('This is a critical message')

    而这里的log_test函数是从另一个模块中导入的,log_test的写法如下:

    import logging logger = logging.getLogger('test.test2') def log_test(): logger.info('This message come from log_test function!') logger.error('This ERROR message come from log_test function!')

    可以看到,我们使用logging.getLogger()来获取某个指定名称的日志,在模块中获取同一个模块名称即可让不同模块的日志按照指定的方式统一输出了,另外,我们也可以通过.的方式来指定,例如在log_test所在的模块中指定logger为'test.test2'也可以。

    可以通过logging.FileHandler()来指定日志的输出地方,并通过设置日志输出等级来过滤指定水平的日志,日志通过logger.info(),logger.debug(),logger.warning(),logger.error(),logger.critical()来输出,这里的logging.StreamHandler()指得是将日志输出到标准输出

    最终的结果如下:

    2019-05-26 20:12:32,584: INFO test This is a info message 2019-05-26 20:12:32,584: INFO test.test2 This message come from log_test function! 2019-05-26 20:12:32,584: ERROR test.test2 This ERROR message come from log_test function! 2019-05-26 20:12:32,584: CRITICAL test This is a critical message

    最后附上formatter中可以用的一些变量列表

    %(name)s Logger的名字 %(levelname)s 文本形式的日志级别 %(message)s 用户输出的消息 %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 %(levelno)s 数字形式的日志级别 %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有 %(filename)s 调用日志输出函数的模块的文件名 %(module)s  调用日志输出函数的模块名 %(funcName)s 调用日志输出函数的函数名 %(lineno)d 调用日志输出函数的语句所在的代码行 %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示 %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数 %(thread)d 线程ID。可能没有 %(threadName)s 线程名。可能没有 %(process)d 进程ID。可能没有

    最新回复(0)