繁体   English   中英

Python日志记录创建多个日志

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM