python - Django 网站中 Python 日志记录 RotatingFileHandler 的问题

标签 python django logging

我有一个 django 支持的网站,我使用标准的日志记录模块来跟踪网络事件。

日志是通过 RotatingFileHandler 完成的,它配置了 10 个日志文件,每个 1000000 字节。日志系统工作,但这是我得到的日志文件:

-rw-r--r-- 1 apache      apache          83 Jul 23 13:30 hr.log
-rw-r--r-- 1 apache      apache      446276 Jul 23 13:03 hr.log.1
-rw-r--r-- 1 apache      apache      999910 Jul 23 06:00 hr.log.10
-rw-r--r-- 1 apache      apache         415 Jul 23 16:24 hr.log.2
-rw-r--r-- 1 apache      apache      479636 Jul 23 16:03 hr.log.3
-rw-r--r-- 1 apache      apache         710 Jul 23 15:30 hr.log.4
-rw-r--r-- 1 apache      apache      892179 Jul 23 15:03 hr.log.5
-rw-r--r-- 1 apache      apache         166 Jul 23 14:30 hr.log.6
-rw-r--r-- 1 apache      apache      890769 Jul 23 14:03 hr.log.7
-rw-r--r-- 1 apache      apache      999977 Jul 23 12:30 hr.log.8
-rw-r--r-- 1 apache      apache      999961 Jul 23 08:01 hr.log.9

如您所见,这是一团糟。最后的日志已写入文件 hr.log.2(7 月 23 日 16:24)而不是 hr.log,并且 logging documentation指出:

[...]例如,备份计数为 5 且基本文件名为 app.log,您将获得 app.log、app.log.1、app.log.2,最多应用程序日志 5。 被写入的文件始终是 app.log。当这个文件填满后,关闭并重命名为app.log.1,如果存在app.log.1、app.log.2等文件,则重命名为app.log.2、app。 log.3 等。

我做错了什么?


我的日志记录配置文件是:

记录器配置文件:

[loggers]
keys=root

[handlers]
keys=fileHandler

[formatters]
keys=simple

#--------------------------------------------------------------------
# Formatters
[formatter_simple]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

#--------------------------------------------------------------------
# Handlers
[handler_fileHandler]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=simple
args=("/data/django/hr/hr.log",'a',1000000,10)

#--------------------------------------------------------------------
# Loggers
[logger_root]
level=DEBUG
handlers=fileHandler

我用来设置日志系统的 python 模块是:

记录器.py

import os, logging

# Load config file
logger_config_file = \
    os.path.join(os.path.abspath(os.path.dirname(__file__)), 'logger.conf')
logging.config.fileConfig(logger_config_file)

# Create logger
logger = logging.getLogger('hr_Logger')

# Log start message
logger.info("Logging system started")

然后,在我的 views.py 顶部,我有:

import logging
from hr import logger

log = logging.getLogger('hr.views')
log.info('Load hr.views')

[...]

最佳答案

当您的代码运行多个进程时,我发现了这种行为。

不幸的是,不存在完美的选择。

您可以结合的一些想法是:

  • 使用 WatchedFileHandler(2.6 中的新功能)并作为 logrotate 与外部程序一起旋转
  • 使用系统日志或其他日志聚合服务器
  • 使用 python 日志聚合 sentry - 这对于 django 特别有用,因为您不仅可以记录日志消息,还可以记录完整堆栈跟踪和 404s 的异常。

关于python - Django 网站中 Python 日志记录 RotatingFileHandler 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3319860/

相关文章:

python - 如何将模型移动到 Django 站点管理中的其他部分

python - Tensorflow.py protected 划分

python - 以 10 为基数的 int() 的文字无效 : 'marlm'

php - 查询密集型网站中的查询日志记录场景

java - 如何从日志中排除 hibernate 输出

c++ - 完全控制日志记录的 C/C++ 日志记录

python - 如何转义字符串中的 '?

python - Tensorflow 中的目标必须是一维 Top_k_categorical_accuracy

jython 上的数据库 Django

django - 按登录用户过滤 django admin