5

info.log、debug.log、error.logのようなPythonで別のログファイルを作成したい私は以下に示すようにログ用の設定ファイル(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ファイラーを使用して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 に答える