【问题标题】:web2py and python loggingweb2py 和 python 日志记录
【发布时间】:2014-08-09 05:57:17
【问题描述】:

我已经像这样使用 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 个文件?

【问题讨论】:

  • 我认为这是两个因素的结合导致了这一点。首先,大小(1000000)太小,文件切换。如果文件切换发生在我们有并发会话写入文件时,它们最终可能会创建单独的文件吗?

标签: python python-2.7 logging web2py


【解决方案1】:

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

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

【讨论】:

  • 没关系。我已经将大小增加到10000000000。让我拭目以待。
【解决方案2】:

我遇到了类似的情况,多个后台 web2py 进程使用 --import_models 运行。调度程序以类似的方式运行后台进程。标准 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")

这是我的用户空间 log​​rotate 配置

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

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多