5

我想在 python 中创建单独的日志记录文件,如 info.log、debug.log、error.log 我有一个用于日志记录的设置文件(logging.conf),如下所示

[loggers]
keys=root,simpleExample

[handlers]
keys=consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=

我已经创建了如下所示的 logging.py 文件

import logging
import logging.config

logging.config.fileConfig('logging.conf')

# create logger
logger = logging.getLogger('simpleExample')

# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

但是当执行 logging.py 文件时,我在 consol 中得到以下结果

2012-12-10 13:30:20,030 - simpleExample - DEBUG - debug message
2012-12-10 13:30:20,031 - simpleExample - INFO - info message
2012-12-10 13:30:20,032 - simpleExample - WARNING - warn message
2012-12-10 13:30:20,032 - simpleExample - ERROR - error message
2012-12-10 13:30:20,033 - simpleExample - CRITICAL - critical message

正如我所说的,我想在 log.info、debug.info、error.info 中创建单独的文件。提前致谢

4

1 回答 1

7

您需要配置多个处理程序以将不同级别的日志输出到不同的文件。比如你想把INFO级别的日志记录到info.log,可以用INFO filer定义一个fileHandler

class MyFilter(logging.Filter):
    def filter(self, rec):
        return rec.levelno == logging.INFO

class MyHandler(logging.FileHandler):
    def __init__(self, *arg, **kw):
        logging.FileHandler.__init__(self, *arg, **kw)
        self.addFilter(MyFilter())

并将其添加到日志命名空间:

logging.MyHandler = MyHandler

所以你可以在你的配置文件中使用它:

[handlers]
keys=consoleHandler,onlyinfoHandler
[handler_onlyinfoHandler]
class=MyHandler
level=DEBUG
formatter=simpleFormatter
args=('info.log','w')

您可以继续添加其他人或使用级别作为处理程序参数。

于 2013-03-25T08:16:06.313 回答