我的logging.ini文件可能有问题。我的python代码适用于另一个文件,但不适用于此文件。
Python运行此main.py
# main.py
import logging
from logging.config import fileConfig
import my_module
# load the logging configuration
fileConfig('logging.ini')
my_module.foo()
bar = my_module.Bar()
bar.bar()
具有定制方法的另一个文件
# my_module.py
import logging
def foo():
logger = logging.getLogger(__name__)
logger.info('Hi, foo')
class Bar(object):
def __init__(self, logger=None):
self.logger = logger or logging.getLogger(__name__)
def bar(self):
self.logger.info('Hi, bar')
self.logger.debug('Testing')
我尝试过此logging.ini
文件,并且可以正常工作
keys=root
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
然后,我想将一些日志保存到文件,并打印一些到控制台,所以在这里我尝试了另一个logging.ini
文件
[loggers]
keys=root,sLogger
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=consoleFormatter,fileFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_sLogger]
level=DEBUG
handlers=consoleHandler,fileHandler
qualname=sLogger
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=WARNING
formatter=consoleFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=fileFormatter
args=('display_info.log','w')
[formatter_consoleFormatter]
format=%(levelname)s - %(message)s
datefmt=
[formatter_fileFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
被这样执行
python main.py
这次程序运行正常,没有错误。但是没有登录display_info.log
。有人可以帮我解决这个问题吗?谢谢!
这是因为您试图通过__name__
获取记录器,该记录器不是"__main__"
,而是“ my_module”。您没有密钥,因此未配置记录器。更改您的getLogger
来调用适当的质量名称sLogger
,它会抓住正确的名称:
import logging
def foo():
# here
logger = logging.getLogger("sLogger")
logger.info('Hi, foo')
class Bar(object):
def __init__(self, logger=None):
# or here
self.logger = logger or logging.getLogger("sLogger")
def bar(self):
self.logger.info('Hi, bar')
self.logger.debug('Testing')
这将使用您给它的名称(它在.ini文件中指向的key
)来调用记录器。现在,您的display_info.log
文件应如下所示:
# display_info.log
2020-03-07 22:14:45,351 - sLogger - INFO - Hi, foo
2020-03-07 22:14:45,351 - sLogger - INFO - Hi, bar
2020-03-07 22:14:45,351 - sLogger - DEBUG - Testing