使用 logger 在脚本中输出多个日志
2017-03-06 21:35
441 查看
最近在写一个小工具的时候,在某个脚本中需要为不同对象,输出单独的属于该对象的日志文件,方便查看。
通常在写 python 脚本的时候,习惯使用 logging 模块来输出日志,简单,方便。
但在这个需求中,如果使用 logging 模块通过复杂配置来实现的话,未免显得麻烦。
但是在查阅 logging 模块文档的时候,发现有一个 logger 的对象。写日志是针对对象来写的,如果有多个对象,那么应该就可以实现。
如上面变成这样
运行程序时不会出错,但输出:
中文译本:http://pythonguidecn.readthedocs.io/zh/latest/writing/logging.html
Loggers:https://docs.python.org/2/howto/logging.html#loggers
通常在写 python 脚本的时候,习惯使用 logging 模块来输出日志,简单,方便。
#!/usr/bin/env python # coding: utf-8 __author__ = "Glon Ho" import logging log_file = '/tmp/logging_test.log' logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', filename=log_file, filemode='a') msg = 'Hi, this is Glon.' logging.info('>>> test log msg: %s', msg) --- Out: [root@localhost]$ cat /tmp/logging_test.log 2017-03-03 17:53:08 INFO >>> test log msg: Hi, this is Glon.
但在这个需求中,如果使用 logging 模块通过复杂配置来实现的话,未免显得麻烦。
但是在查阅 logging 模块文档的时候,发现有一个 logger 的对象。写日志是针对对象来写的,如果有多个对象,那么应该就可以实现。
#!/usr/bin/env python # coding: utf-8 __author__ = "Glon Ho" import logging def get_logger(logger_name, log_file, level=logging.INFO): l = logging.getLogger(logger_name) formatter = logging.Formatter('%(asctime)s : %(message)s', "%Y-%m-%d %H:%M:%S") fileHandler = logging.FileHandler(log_file, mode='a') fileHandler.setFormatter(formatter) l.setLevel(level) l.addHandler(fileHandler) return logging.getLogger(logger_name) if __name__ == '__main__': log_file1='/tmp/logger_test1.log' log_file2='/tmp/logger_test2.log' logger1 = get_logger('Glon', log_file1) logger2 = get_logger('GlonHo', log_file2) logger1.info('>>> test1 log msg: %s', "111111111111111111111") logger2.info('>>> test2 log msg: %s', "222222222222222222222") --- Out: [root@localhost]$ ls /tmp/logger_test* /tmp/logger_test1.log /tmp/logger_test2.log [root@localhost]$ [root@localhost]$ cat /tmp/logger_test1.log 2017-03-03 17:57:20 : >>> test1 log msg: 111111111111111111111 [root@localhost]$ [root@localhost]$ cat /tmp/logger_test2.log 2017-03-03 17:57:20 : >>> test2 log msg: 222222222222222222222
注意
在通过 get_logger 来得到日志对象的时候,给定的对象名称不能相同,否则产生的是同一个日志对象。如上面变成这样
logger1 = get_logger('Glon', log_file1) logger2 = get_logger('Glon', log_file2) logger1.info('>>> test1 log msg: %s', "111111111111111111111") logger2.info('>>> test2 log msg: %s', "222222222222222222222")
运行程序时不会出错,但输出:
--- Out: [root@localhost]$ ls /tmp/logger_test* /tmp/logger_test1.log /tmp/logger_test2.log [root@localhost]$ [root@localhost]$ cat /tmp/logger_test1.log 2017-03-03 17:59:41 : >>> test1 log msg: 111111111111111111111 2017-03-03 17:59:41 : >>> test2 log msg: 22222222222222222222 [root@localhost]$ [root@localhost]$ cat /tmp/logger_test2.log 2017-03-03 17:59:41 : >>> test1 log msg: 111111111111111111111 2017-03-03 17:59:41 : >>> test2 log msg: 222222222222222222222
参考:
logging:https://docs.python.org/2/library/logging.html中文译本:http://pythonguidecn.readthedocs.io/zh/latest/writing/logging.html
Loggers:https://docs.python.org/2/howto/logging.html#loggers
相关文章推荐
- 使用 logger 在脚本中输出多个日志
- 使用 logger 在脚本中输出多个日志
- 使用 logger 在脚本中输出多个日志
- [S60]使用日志类RFileLogger输出调试信息
- [S60]使用日志类RFileLogger输出调试信息
- Logger 日志输出请使用 {}
- 使用log4Net 输出日志到mongodb
- 如何使用java.util.logging中的Logger来记录日志
- Ajax中使用Response.Write输出javascript脚本出错的解决办法
- Ajax中使用Response.Write输出javascript脚本出错的解决办法
- 使用logcxx库和boost库构建系统日志的格式化输出
- 关于Logger日志的控制台输出问题
- 使用ACE日志策略时遇到的问题:DLL::open failed for ACE: Error: check log for details Unable to find service 'Logger'
- Enterprise Library 2.0 Logging Application Block日志组件使用除错笔记(“Microsoft.Practices.EnterpriseLibrary.Logging.Logger”的类型初始值设定项引发异常。 )
- 使用OnPreRender 输出脚本
- Ajax中使用Response.Write输出javascript脚本出错的解决方案
- 使用数据库脚本方式分析SqlServer2005数据库中的LOG日志
- Web项目中使用NLog记录日志,利用单件模式控制整个项目只有一个Logger对象的问题
- 使用java的代理机制实现日志的输出
- 使用log4j为Tomcat输出日志