是否可以为整个python项目设置默认日志文件?

2024-05-16 03:30:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是django mailer库,在engine.py中包含日志调用:

...
if connection is None:
    connection = get_connection(backend=EMAIL_BACKEND)
logging.info("sending message '{0}' to {1}".format(
    message.subject.encode("utf-8"),
    u", ".join(message.to_addresses).encode("utf-8"))
)
...

但是,代码没有为此日志记录设置目标。我想在不修改库代码的情况下设置它。你知道吗

那么,我应该把选择要使用的文件的配置放在哪里呢?在Django的例子中,在设置.py档案工作?推荐/不推荐?你知道吗

我已经通读了Python documentation on logging,但不清楚如何从不同的文件设置它,使其全局工作。你知道吗

另外,要限制特定库的日志记录吗?因此,我不需要把所有的日志都放到一个中心文件中,我可以把它放到一个只供django mailer使用的文件中。你知道吗


Tags: 文件todjango代码pymessageifis
2条回答

您可以在设置文件中非常灵活地设置日志记录。大量的文档here。你知道吗

这只是@seddonym向您指出的日志文档的一个示例(在本例中,Django文档比Python文档更有帮助)。在你的Django里设置.py文件中,可以包含如下日志配置:

# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
    'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
        'custom': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': <path_to_your_log_file>,
            'mode': 'a',
            'maxBytes': 10000000,
            'backupCount': 5,
            'formatter': 'verbose'
        }
    },
    'loggers': {
        '': {
            'handlers': ['custom'],
            'level': 'INFO',
            'propagate': True,
        },
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        }
    }
}

相关问题 更多 >