我想把日志记录在python python项目中。为此,我在我的common.py中写了一个名为get_logger
的方法,它返回记录器。Python的单身日志记录不能正常工作 - 文件中的重复日志语句
import logging
def get_logger(name='app'):
log_config = config.LOG_CONFIG
logging.config.dictConfig(log_config)
logger = logging.getLogger(name)
return logger
请注意,日志配置放在config.LOG_CONFIG
LOG_CONFIG = {
'version': 1,
'disable_existing_loggers': False, # this fixes the problem
'formatters': {
'standard': {
'format': '%(asctime)s [%(levelname)8s] %(name)s: %(message)s'
},
# more formatters
},
'handlers': {
'file': {
'filename': '%s/%s' % (_cwd, '../logs/app/logging.log'),
'formatter': 'standard',
'when': 'midnight',
'class': 'logging.handlers.TimedRotatingFileHandler'
},
},
'loggers': {
# Works for
# 1. application logs (flask) and
# 2. all other logs where below logger name is passed to getLogger
'app': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True
},
# For all the remaining logs
# Important: Don't include for production??
'': {
'handlers': ['file'],
'level': 'INFO',
'propagate': True
}
}
}
我有两个模块
- base.py
- sf_apis.py
类从sf_apis.py从base.py扩展了一个类。我在base.py中调用了get_logger。
base.py
from common import get_logger
log = get_logger()
class Base:
// .. some code ..
然后就叫从logging
getLogger
来获取记录在sf_apis.py
sf_apis.py
import logging
log = logging.getLogger('app')
class SfBulk(Base):
// .. some code ..
但是,当我的另一r称为sync_data.py
模块通过调用sf_apis.py
一些方法UNS,我看到重复的日志报表在我的日志
2015-11-04 13:05:58,605 [ INFO] app: close_the_job :: job id = 75090000003sf4YAAQ
2015-11-04 13:05:58,605 [ INFO] app: close_the_job :: job id = 75090000003sf4YAAQ
我读它here是
记录模块已经实现了单件模式
所以我没有去创建一个单例记录器类(在互联网上有很多例子)
我做了什么小姐?请帮忙。
是的。这是问题。 Upvoted并接受你的答案。还有一件事,不是调用'logging.getLogger',而是在'sf_api.py'中调用我的'get_logger'。因为我希望我的每个模块都是独立的。 – Hussain
当然,你可以。我还建议你重构'get_logger',这样''第一次调用get_logger'时,'dictConfig'只被调用一次 –
那好多了。有关如何仅调用一次“dictConfig”的提示? – Hussain