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

时间:2014-11-13 16:52:29

标签: python django

我正在使用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的情况下,将在settings.py文件中放一些东西吗?这是推荐/不推荐的吗?

我已阅读Python documentation on logging,但目前尚不清楚如何从其他文件设置它以便全局运作。

另外,无论如何限制特定库的日志记录?因此,我没有将所有日志记录转到中央文件,而是将其转到django-mailer的文件中。

2 个答案:

答案 0 :(得分:1)

您可以在设置文件中灵活地设置日志记录。大量文档here

答案 1 :(得分:0)

这是一个与@seddonym指向您的日志记录文档相关的示例(在这种情况下,Django文档将比Python文档更有帮助)。在Django settings.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,
        }
    }
}