为什么这个日志设置不起作用?

时间:2017-04-25 19:13:55

标签: python logging

我的__init__.py中有以下代码,它为我的python包设置了我的记录器:

import logging
import logging.config
global LOG_FILENAME
LOG_CONFIG_FILE=os.path.join(os.path.dirname(os.path.abspath(__file__)),
                             'logging_config.conf')
if os.path.isfile(LOG_CONFIG_FILE)!=True:
    raise Exception
logging.config.fileConfig(LOG_CONFIG_FILE,disable_existing_loggers=False)

LOG=logging.getLogger('root')
LOG.info('Initializing PyCoTools')
LOG.info('Initializing Logging System')
LOG.info('logging config file at: {}'.format(LOG_CONFIG_FILE))

在与__init__.py相同的目录中,我有一个名为logging_config.conf的日志配置文件,其中包含以下内容:

[formatters]
keys: simple,custom,custom2

[handlers]
keys: console,fh,rotatingfh

[loggers]
keys: root,pycopi,PEAnalysis,pydentify2

[logger_root]
level: DEBUG
handlers: rotatingfh,console
qualname=root
propagate=0

[logger_pycopi]
level: DEBUG
handlers: rotatingfh,console
qualname=pycopi
propagate=0

[logger_PEAnalysis]
level: DEBUG
handlers: rotatingfh,console
qualname=PEAnalysis
propagate=0

[logger_pydentify2]
level: DEBUG
handlers: rotatingfh,console
qualname=pydentify2
propagate=0


[handler_console]
class: logging.StreamHandler
args: (sys.stdout,)
formatter: custom2
level: DEBUG

[handler_fh]
class: logging.FileHandler
args: ('log.log','a')
formatter: custom2
level=DEBUG

[handler_rotatingfh]
class: logging.handlers.RotatingFileHandler
args: ('log.log',100000,2)
formatter: custom2
level=DEBUG

[formatter_simple]
format: %(name)s:%(levelname)s:  %(message)s

[formatter_custom]
format: %(asctime)s:%(levelname)s:%(filename)s:%(funcName)s:%(message)s

[formatter_custom2]
format: %(levelname)s:%(name)s:%(module)s:%(lineno)d:%(message)s

然后在每个python模块(例如pycopi.py)中我有:

LOG=logging.getLogger(__name__)

所以我可以开始登录每个文件,如:

LOG.debug('Debugging my code')

这正如预期的那样工作(即,在今天早些时候记录到控制台和级别调试的文件),但没有故意改变任何东西,这个记录器实际上不再进行任何记录。有人能发现问题吗?

1 个答案:

答案 0 :(得分:0)

看起来因为我正在使用日志系统' intra'包,即我在开发包时记录的东西,__init__.py文件没有被自动调用,就像我使用import中的包一样。因此,日志设置代码未被使用且没有日志记录。该解决方案并不优雅,但它可以为每个python会话手动运行__init__.py文件。