web2py和python日志记录

时间:2014-08-09 05:57:17

标签: python python-2.7 logging web2py

我使用logging.conf设置了web2py日志记录,如下所示 -

args=("logs/my_log.log", "a", 1000000, 5)

但我最终得到了许多像这样的小文件 -

    166 Aug  8 05:48 my_log.log.1
  34011 Aug  8 07:16 my_log.log.2
  28650 Aug  8 10:36 my_log.log.3
   9593 Aug  8 10:37 my_log.log.4
   3222 Aug  8 12:13 my_log.log

可能是什么问题?我对web2py调度程序有类似的配置。这只会创建一个文件并继续追加。我只运行一个调度程序作业。 web2py是否在这种特定情况下创建了5个文件,因为可能有多个会话试图写入一个文件,失败并最终创建5个文件?

2 个答案:

答案 0 :(得分:0)

如果不查看web2y日志配置文件/设置,很难判断。

我发现处理web2py之外的日志更容易 - 使用通用设置,不要将web2py配置为轮换/存档/删除日志,而是使用logrotate之类的东西来管理所有这些。

答案 1 :(得分:0)

我遇到了类似的情况,使用--import_models运行多个后台web2py进程。调度程序以类似的方式运行后台进程。标准logging.conf设置使用RotatingFileHandler。该处理程序似乎正在检查它已打开的文件描述符的大小。超过大小限制后,它将打开一个新文件,并重命名当前文件。

问题在于,每个后台web2py进程(包括调度程序进程)都在查看他们先前打开的日志文件。因此,当一个进程检测到超出大小限制时,该进程将移至新的日志文件。其他进程仍链接到先前的文件。如果其他进程尝试记录某些内容,则将看到超出大小限制,并移至新的日志文件。不久之后,每个进程都将写入各自的(小的)日志文件。

我的解决方案是切换到WatchedFileHandler并使用logrotate来管理日志轮换。在进行任何日志记录事件之前,WatchedFileHandler将检测到其文件已被旋转,并(重新)打开最新的命名日志文件。因此,所有进程都将写入最新的命名日志文件。这是我的web2py logging.conf设置的摘录:

[handlers]
keys=consoleHandler,messageBoxHandler,watchedFileHandler
  :
[logger_<your web2py app>]
level=WARNING
qualname=web2py.app.<your web2py app>
handlers=consoleHandler,watchedFileHandler
propogate=0
  :
[handler_watchedFileHandler]
class=handlers.WatchedFileHandler
level=DEBUG
formatter=simpleFormatter
args=("logs/web2py.log","a")

这是我的用户空间logrotate配置

<path to logfile>/web2py.log {
    rotate 5
    maxsize 100000
    compress
    delaycompress
    missingok
    nocreate
}
相关问题