2016-04-22 109 views
0

注意我知道this answer但这不适合我,我希望有一个完整的,独立的工作示例。Python中的基本日志记录dictConfig

我想在Python(2.7)

我的理解是basicConfig仅仅设置了根记录器与dictConfig更换logging.basicConfig:所以我试图做的dictConfig相同。也就是说,用一个处理程序设置根记录器,然后我的应用程序中的所有记录器将传播到根记录器。

以下代码片段缺少什么?行为是创建日志文件,但没有输出。 (我试过设置水平的各种连击,它似乎并没有帮助)

import logging 
log_dict = { 
    'loggers': { 
     'root': { 
      'handlers': ['file_handler'] 
     } 
    }, 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
     'file_handler': { 
      'filename': 'c:/mylogfile.log', 
      'class': 'logging.FileHandler' 
     } 
    } 
} 

logging.config.dictConfig(log_dict) 
logging.info('THIS IS A TEST') 
logging.shutdown() 
exit() 
+0

可能重复的[python:dict的完整示例为logging.config.dictConfig?](http://stackoverflow.com/questions/7507825/python-complete-example-of-dict-for-logging- config-dictconfig) – user3159253

+0

不是重复的,因为链接的票证不是一个完整的,自包含的工作示例,并且在该示例中使用该词典对我不起作用。 – Zero

回答

1

下面的代码工作完美的我:

import logging 
import logging.config 

log_dict = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'standard': { 
      'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s' 
     }, 
    }, 
    'handlers': { 
     'default': { 
      'level': 'INFO', 
      'formatter': 'standard', 
      'class': 'logging.StreamHandler', 
     }, 
     'file_handler': { 
      'level': 'INFO', 
      'filename': '/tmp/mylogfile.log', 
      'class': 'logging.FileHandler', 
      'formatter': 'standard' 
     } 
    }, 
    'loggers': { 
     '': { 
      'handlers': ['file_handler'], 
      'level': 'INFO', 
      'propagate': True 
     }, 
    } 
} 
logging.config.dictConfig(log_dict) 
logging.info("test") 

事实上,它是基于提到的答案上述

3

有一个问题与您发布配置两件事情:

  1. 与一个名称的记录器不是根记录器。根记录器具有''的名称,并且在一般使用'root'条目'loggers'配置更好配置,如在记录文档的this部分描述:

记录器 - 中的相应值将是...

...

root - 这将是根记录器的配置。 ...

  • 您还没有指定一个日志级别,因此它保持在中WARNING默认级别,这意味着info()消息将不会示出。