Python日志记录会创建多个日志

时间:2016-03-02 00:56:16

标签: python logging

所以我试图在多个模块中记录一些信息,然后我设置了一个记录器,但它记录了两次。我已经研究了一段时间了,主要的建议是在我记录的每个模块中添加一个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")

2 个答案:

答案 0 :(得分:0)

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')

答案 1 :(得分:0)

__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

这有帮助吗?