![](/img/trans.png)
[英]Python Logging - Closing one file across multiple logs (ResourceWarning)
[英]Python logging creates multiple logs
因此,我试图在多个模块中记录一些信息,并设置了一个记录器,但它记录了所有内容两次。 我对此进行了一段时间的研究,主要建议是在我登录的每个模块中添加一个getLogger('something')。 如果需要,我将以这种方式实现它,但是我正在寻找一种方法(如果存在)在主模块中一次创建记录器,并将其传递给其他模块(希望通过导入)。
这就是我在init .py中创建记录器的方式,
formatter = logging.Formatter("[%(asctime)s] {%(module)s:%(lineno)d} (levelname)s - %(message)s")
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(formatter)
app.logger.addHandler(file_handler)
我的其他模块当前正在导入,并按如下方式调用它,
from __init__ import app
app.logger.info("message test")
logging.conf
[loggers]
keys=root,main
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_main]
level=DEBUG
qualname=main
handlers=fileHandler
#####################handlers#########################
[handlers]
keys=consoleHandler,fileHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=fmt
args=(sys.stdout,)
#10M-->10*1024*1024,append mod,5-->5 pcs
[handler_fileHandler]
class=logging.handlers.RotatingFileHandler
level=DEBUG
formatter=fmt
args=('info.log','a',10*1024*1024,5,)
######################formatters#########################
[formatters]
keys=fmt
[formatter_fmt]
format= %(asctime)s %(filename)s[line:%(lineno)d] -loggername:%(name)s- %(levelname)s --> %(message)s
datefmt=
################################################
您编写脚本:
import logging
import logging.config
logging.config.fileConfig('logging.conf')
logger = logging.getLogger("main")
logger.debug('This is debug message')
logger.info('This is info message')
logger.warning('This is warning message')
logger.error('this is error message')
logger.critical('this critical')
__init__.py
:
import logging
formatter = logging.Formatter("[%(asctime)s] {%(module)s:%(lineno)d} (levelname)s - %(message)s")
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(formatter)
logger = logging.getLogger('app')
logger.addHandler(file_handler)
logger.setLevel(logging.INFO)
logger.info('Logger initialized')
app.py
:
from __init__ import logger
logger.info('message test')
一次运行app.py之后example.log
内容:
[2016-03-01 20:03:01,364] {__init__:12} (levelname)s - Logger initialized
[2016-03-01 20:03:01,364] {app:3} (levelname)s - message test
再次运行app.py之后example.log
内容:
[2016-03-01 20:03:01,364] {__init__:12} (levelname)s - Logger initialized
[2016-03-01 20:03:01,364] {app:3} (levelname)s - message test
[2016-03-01 20:03:12,034] {__init__:12} (levelname)s - Logger initialized
[2016-03-01 20:03:12,034] {app:3} (levelname)s - message test
这有帮助吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.