2017-06-07 4 views
1

J'essaie d'ajouter le python MemoryHandler dans un fichier de configuration de journalisation. J'utilise une structure similaire à un gestionnaire de fichiers qui a fonctionné précédemment. Je suis un peu confus quant à l'erreur que je reçois et je n'arrive pas à comprendre ce qui me manque pour que la consignation soit enregistrée. Les informations nécessaires ont été incluses ci-dessous. Une assistance serait grandement appréciée.Enregistrement Python dans MemoryHandler initialisé dans le fichier de configuration

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 

erreur Traceback

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') 

Répondre

1

Utilisation ce fichier de configuration à la place:

[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 

Notez que vous ne devez pas inclure la consoleHandler dans la liste des gestionnaires pour l'enregistreur racine. En outre, vous devez définir la cible à l'aide d'une ligne target= et elle doit référencer la clé du gestionnaire cible. Utilisez les éléments suivants pour configurer:

logging.config.fileConfig('logging.ini')