gpt4 book ai didi

python - 在 Python 3 中记录到多个文件

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:52 26 4
gpt4 key购买 nike

我已经为我的 Python 应用程序定义了日志配置:

from logging import config
from os.path import expanduser


def load_logconfig(app):

home = expanduser('~')
default_file_prefix = 'my_app'
default_log_level = 'DEBUG' if 'debug_mode' in app.registry.settings else 'WARN'
extra_loggers = ['requests', 'selenium', 'easyprocess', 'transaction', 'pyvirtualdisplay']
excludes = ['defaults', 'temp', 'test']

default_logging = {
'version': 1,
'formatters': {
'short': {
'format': '%(asctime)s\t%(message)s',
},
'long': {
'format': '%(asctime)s %(levelname)-5.5s [%(threadName)s]\t%(message)s'
},
'generic': {
'format': '%(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s]\t%(message)s'
}
},
'handlers': {
'console': {
'level': default_log_level,
'class': 'logging.StreamHandler',
'stream': 'ext://sys.stdout',
'formatter': 'long'
},
'debuglog': {
'class': 'logging.handlers.RotatingFileHandler',
'level': default_log_level,
'filename': '{}/logs/my_app/debug.log'.format(home),
'formatter': 'generic',
'maxBytes': 102400000,
'backupCount': 20,
'encoding': 'utf8'
},
'warnlog': {
'class': 'logging.handlers.RotatingFileHandler',
'level': 'ERROR',
'filename': '{}/logs/my_app/error.log'.format(home),
'formatter': 'generic',
'maxBytes': 102400000,
'backupCount': 20,
'encoding': 'utf8'
}
},
'loggers': {
'sqlalchemy': {'level': 'INFO', 'qualname': 'sqlalchemy.engine', 'propagate': False},
},
'root': {
'level': default_log_level,
'handlers': ['console', 'debuglog', 'warnlog'],
'propagate': False
}
}

for logger in extra_loggers:
default_logging['loggers'][logger] = {'level': 'WARN', 'qualname': logger, 'propagate': False}

for endpoint in app.registry.cornice_services:
endpoint_name = endpoint.split('/')[1]
handler_name = '{}_{}'.format(default_file_prefix, endpoint_name)
if handler_name not in default_logging['handlers'] and len(endpoint_name) > 0 and endpoint_name not in excludes:
default_logging['handlers'][handler_name] = {
'level': default_log_level,
'class': 'logging.handlers.RotatingFileHandler',
'filename': '{}/logs/my_app/{}_{}.log'.format(home, default_file_prefix, endpoint_name),
'formatter': 'generic',
'maxBytes': 102400000,
'backupCount': 20,
'encoding': 'utf8'
}
default_logging['root']['handlers'].append(handler_name)

config.dictConfig(default_logging)

我有一个用于日志记录的辅助函数:

import logging


def write_log(request, loglevel, message, mongo_log=False, send_email=False, **kwargs):
requested_name = request.path.split('/')[1]
log = logging.getLogger('my_app_{}'.format(requested_name))
level = logging.getLevelName(loglevel.upper())
msg = '[{}] [{}] {}'.format(request.remote_addr, request.method, message)

log.log(level, msg)

# do some other stuff...

return True

它的用法相当简单:

write_log(request, 'debug', 'some informative message', send_email=True)

我想在这里实现的是根据我在这里所说的端点,在不同的文件中写入日志消息 - 例如如果请求端点 users,消息应写入 my_app_users.log 文件中。来自 companies 端点的消息应写入 my_app_companies.log 文件等
在我当前的设置下,日志消息被写入所有文件中,但我只是不明白为什么。我认为我可能误解了 logging.getLogger() 的用法,但我不确定如何正确处理我每次想要使用的handler

最佳答案

啊好吧,再读一遍关于 logging 的内容之后,我意识到我没有将我需要的东西添加到 default_logging['loggers'] 中。一旦我在那里定义了它们,一切都会按预期进行。

关于python - 在 Python 3 中记录到多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36310686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com