我找到了一些将消息记录到多个文件的类似示例。但没有什么比我想要的更好。我正在使用日志记录模块,我将所有信息消息记录到控制台和文件。 (我将在以后关闭控制台记录)。
但是我想扩展它以将所有信息消息记录到file.log并将所有错误消息记录到file.err。如果可以将所有消息记录到file.log(错误和信息),然后将所有错误消息记录到单独的文件,那就更好了。
这可能吗?
我显然无法回答7个小时的问题,所以我只会更新原来的问题。
我现在感到愚蠢。在发布之前几个小时尝试示例后,我再次发现了这个问题。 在阅读示例时,它就像键入我试图做的事情一样触发了一些事情。
http://docs.python.org/2/howto/logging-cookbook.html
将INFO级别及以上的所有内容输出到一个日志文件(log_file),然后将logging.error和logging.warning消息输出到单独的文件(err_file)
# set up logging to file - see previous section for more details
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
filemode='w')
log_error = logging.FileHandler(err_file)
log_error.setLevel(logging.WARNING)
log_info = logging.FileHandler(log_file)
log_info.setLevel(logging.INFO)
# set a format which is simpler for console use
formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s')
# tell the handler to use this format
log_error.setFormatter(formatter)
log_info.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(log_info)
logging.getLogger('').addHandler(log_error)
答案 0 :(得分:3)
一种方法是插入Filter,这是一个很好的示例,只能过滤一个级别here:
import logging
class InfoFilter(logging.Filter):
def filter(self, rec):
return rec.levelno == logging.INFO
然后Filter
对象可以Handler
使用方法Handler.addFilter(filt)
答案 1 :(得分:3)
<强> test_log.py:强>
import logging
def get_logger(
LOG_FORMAT = '%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
LOG_NAME = '',
LOG_FILE_INFO = 'file.log',
LOG_FILE_ERROR = 'file.err'):
log = logging.getLogger(LOG_NAME)
log_formatter = logging.Formatter(LOG_FORMAT)
# comment this to suppress console output
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(log_formatter)
log.addHandler(stream_handler)
file_handler_info = logging.FileHandler(LOG_FILE_INFO, mode='w')
file_handler_info.setFormatter(log_formatter)
file_handler_info.setLevel(logging.INFO)
log.addHandler(file_handler_info)
file_handler_error = logging.FileHandler(LOG_FILE_ERROR, mode='w')
file_handler_error.setFormatter(log_formatter)
file_handler_error.setLevel(logging.ERROR)
log.addHandler(file_handler_error)
log.setLevel(logging.INFO)
return log
def main():
my_logger = get_logger()
my_logger.info('This is an INFO message')
my_logger.warning('This is a WARNING message')
my_logger.error('This is an ERROR message')
if __name__ == '__main__':
main()
输出
$ python test_log.py
2013-09-20 11:52:07,096 root INFO This is an INFO message
2013-09-20 11:52:07,096 root WARNING This is a WARNING message
2013-09-20 11:52:07,096 root ERROR This is an ERROR message
$ cat file.log
2013-09-20 11:52:07,096 root INFO This is an INFO message
2013-09-20 11:52:07,096 root WARNING This is a WARNING message
2013-09-20 11:52:07,096 root ERROR This is an ERROR message
$ cat file.err
2013-09-20 11:52:07,096 root ERROR This is an ERROR message