Python:记录到多个日志文件

时间:2013-02-28 23:30:23

标签: python logging

目前我已将所有内容记录到一个日志文件中,但我想将其分离为多个日志文件。我看一下python文档中的日志记录,但是他们没有讨论这个问题。

log_format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
logging.basicConfig(filename=(os.path.join(OUT_DIR, + '-user.log')),
            format=log_format, level=logging.INFO, datefmt='%Y-%m-%d %H:%M:%S')

目前我正在进行日志记录。我想要做的是有不同类型的错误或信息登录到不同的日志文件。当我执行logging.info('Logging IN')logging.error('unable to login')时,将转到相同的日志文件。我想分开他们。我是否需要创建另一个日志记录对象以支持登录到另一个文件?

2 个答案:

答案 0 :(得分:2)

您/可能/做什么(我没有过多地挖掘logging模块以便有更好的方法来执行此操作)可能是使用流而不是文件对象:

In [1]: class LogHandler(object):
   ...:     def write(self, msg):
   ...:         print 'a :%s' % msg
   ...:         print 'b :%s' % msg
   ...:         

In [3]: import logging
In [4]: logging.basicConfig(stream=LogHandler())
In [5]: logging.critical('foo')
a :CRITICAL:root:foo
b :CRITICAL:root:foo

In [6]: logging.warn('bar')
a :WARNING:root:bar
b :WARNING:root:bar

进一步处理进行编辑

假设您的日志文件已经存在,您可以执行以下操作:

import logging

class LogHandler(object):
    format = '%(levelname)s %(message)s'
    files = { 
        'ERROR': 'error.log',
        'CRITICAL': 'error.log',
        'WARN': 'warn.log',
    }   
    def write(self, msg):
        type_ = msg[:msg.index(' ')] 
        with open(self.files.get(type_, 'log.log'), 'r+') as f:
            f.write(msg)

logging.basicConfig(format=LogHandler.format, stream=LogHandler())
logging.critical('foo')

这将允许您根据日志消息中的条件将日志记录拆分为各种文件。如果找不到您要找的内容,则只需默认为log.log

答案 1 :(得分:1)

我是从docs.python.org/2/howto/logging-cookbook.html

创建此解决方案的

只需创建两个日志文件处理程序,分配其日志记录级别并将其添加到记录器中。

intervals = sorted(intervals, key=lambda l:l[0])