Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:记录到多个日志文件_Python_Logging - Fatal编程技术网

Python:记录到多个日志文件

Python:记录到多个日志文件,python,logging,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.

目前,我已经将所有内容记录到一个日志文件中,但我想将其分离到多个日志文件中。我查看了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('cannot login')时,
将转到同一个日志文件。我想把它们分开。我是否需要创建另一个日志对象来支持登录到另一个文件?

您/可以/可以/做的事情(我没有深入了解
日志记录
模块,因此可能有更好的方法)可能是使用流而不是文件对象:

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

我从中创建此解决方案

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

import os
import logging

current_path = os.path.dirname(os.path.realpath(__file__))

logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)

#to log debug messages                               
debug_log = logging.FileHandler(os.path.join(current_path, 'debug.log'))
debug_log.setLevel(logging.DEBUG)

#to log errors messages
error_log = logging.FileHandler(os.path.join(current_path, 'error.log'))
error_log.setLevel(logging.ERROR)

logger.addHandler(debug_log)
logger.addHandler(error_log)

logger.debug('This message should go in the debug log')
logger.info('and so should this message')
logger.warning('and this message')
logger.error('This message should go in both the debug log and the error log')

你想达到什么目标?您是严格要求原始日志文件的副本,还是尝试按日志级别进行分隔,还是?。请参阅上的示例,为问题添加了更多信息