2017-06-07 11 views
1

ログ設定ファイルにpython MemoryHandlerを追加しようとしています。私は以前に働いていたファイルハンドラと同様の構造を使用しています。私は、私が受け取っているエラーについて少し混乱しています。ロギングをメモリに入れるために、私が見逃しているものを理解できません。必要な情報が以下に含まれています。設定ファイルで初期化されたMemoryHandlerへのPythonログ

log_settings.conf

[loggers] 
keys=root 

[handlers] 
keys=memHandler, consoleHandler 

[formatters] 
keys=fileFormatter, consoleFormatter 

[logger_root] 
level=DEBUG 
handlers=memHandler, consoleHandler 

[handler_consoleHandler] 
class=StreamHandler 
level=INFO 
formatter=consoleFormatter 
args=(sys.stdout,) 

[handler_memHandler] 
class=handlers.MemoryHandler 
formatter=fileFormatter 
args=(10, DEBUG, '%(logfilename)s') 

[formatter_fileFormatter] 
format=[%(asctime)s] [%(levelname)8s] --- (%(filename)15s:%(lineno)4s) %(message)s 
datefmt=%Y-%m-%d %H:%M:%S 

[formatter_consoleFormatter] 
format=%(message)s 

エラートレースバック

Traceback (most recent call last): 
    File "E:\BuildScript\proj_tcl\blr_sbz\blr_sbz_build.py", line 22, in <module> 
    main(args.jenkins, args.revision, args.jenkins_num) 
    File "E:\BuildScript\proj_tcl\blr_sbz\blr_sbz_build.py", line 10, in main 
    build(jenkins, revision, jenkins_num) 
    File "../scripts\build.py", line 17, in build 
    logging.info('Starting the FGPA build script') 
    File "C:\Program Files\Python36\lib\logging\__init__.py", line 1870, in info 
    root.info(msg, *args, **kwargs) 
    File "C:\Program Files\Python36\lib\logging\__init__.py", line 1301, in info 
    self._log(INFO, msg, args, **kwargs) 
    File "C:\Program Files\Python36\lib\logging\__init__.py", line 1437, in _log 
    self.handle(record) 
    File "C:\Program Files\Python36\lib\logging\__init__.py", line 1447, in handle 
    self.callHandlers(record) 
    File "C:\Program Files\Python36\lib\logging\__init__.py", line 1509, in callHandlers 
    hdlr.handle(record) 
    File "C:\Program Files\Python36\lib\logging\__init__.py", line 858, in handle 
    self.emit(record) 
    File "C:\Program Files\Python36\lib\logging\handlers.py", line 1213, in emit 
    self.flush() 
    File "C:\Program Files\Python36\lib\logging\handlers.py", line 1289, in flush 
    self.target.handle(record) 
AttributeError: 'str' object has no attribute 'handle' 

build.py

logging.config.fileConfig('../scripts/logging/log_settings.conf', defaults={'logfilename': '../scripts/logging/log.log'}) 
logging.info('Starting the FGPA build script') 

答えて

1

使用代わりに、この設定ファイル:あなたはルートロガーのハンドラのリストにconsoleHandlerを含めるべきではありません

[loggers] 
keys=root 

[handlers] 
keys=memHandler, consoleHandler 

[formatters] 
keys=fileFormatter, consoleFormatter 

[logger_root] 
level=DEBUG 
handlers=memHandler 

[handler_consoleHandler] 
class=StreamHandler 
level=INFO 
formatter=consoleFormatter 
args=(sys.stdout,) 

[handler_memHandler] 
class=handlers.MemoryHandler 
formatter=fileFormatter 
args=(10, DEBUG) 
target=consoleHandler 

[formatter_fileFormatter] 
format=[%(asctime)s] [%(levelname)8s] --- (%(filename)15s:%(lineno)4s) %(message)s 
datefmt=%Y-%m-%d %H:%M:%S 

[formatter_consoleFormatter] 
format=%(message)s 

注意。また、target=行を使用してターゲットを設定する必要があり、ターゲットハンドラーのキーを参照する必要があります。以下を使用して構成します。

logging.config.fileConfig('logging.ini') 
関連する問題