我的__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')
这正如预期的那样工作(即,在今天早些时候记录到控制台和级别调试的文件),但没有故意改变任何东西,这个记录器实际上不再进行任何记录。有人能发现问题吗?
答案 0 :(得分:0)
看起来因为我正在使用日志系统' intra'包,即我在开发包时记录的东西,__init__.py
文件没有被自动调用,就像我使用import
中的包一样。因此,日志设置代码未被使用且没有日志记录。该解决方案并不优雅,但它可以为每个python会话手动运行__init__.py
文件。