您的位置:首页 > 其它

使用 logger 在脚本中输出多个日志

2017-03-06 21:35 441 查看
最近在写一个小工具的时候,在某个脚本中需要为不同对象,输出单独的属于该对象的日志文件,方便查看。

通常在写 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: