比如
有一个接口,我会记录用户的请求数据 dataA,比如 querystring 再加其他一些数据,
但是我又不想把 dataA 直接用 print
输出到 sys.stdout 里面去,因为这样 dataA 并不好找,所以我就用了 FileRotateHandler,并设置文件最大为 50M,
然而这样会产生一个问题就是,当我用 supervisor 启动多个 web 进程的时候,我发现有许多日志文件大为在 5M
的时候就被切割出来了。如果要解决这种问题是不是只有使用队列这一种方式呢
1
0asis 2017-06-10 22:53:44 +08:00
一般框架都会自带 log 模块吧
|
2
chenqh OP @0asis log 模块无法处理由于多个 supervisor 进程 导致的多进程问题吧,除非让 supervisor 来处理
|
3
Fishdrowned 2017-06-10 23:17:22 +08:00 via Android
不懂 python。你可以 log 到 rsyslog,然后用 logrotate 分割 log 文件
|
4
SErHo 2017-06-10 23:19:23 +08:00 1
我一般采用下面两种方法:
1. 日志直接输出到 stdout,如直接 print 或者 logging.StreamHandler,然后配置 supervisor 的 stdout_logfile 来将标准输出记录到文件 2. FileRotateHandler 不是进程安全的,多个进程使用会在切文件的时候产生竞争,造成文件切的大小不准确,可以实现一个多进程安全的 RotatingFileHandler https://gist.github.com/SerhoLiu/a3d7be43df882af80ef98bc375fc6046.js |
6
Ge4Los 2017-06-10 23:43:06 +08:00 1
FileRotateHandler 不是进程安全的。
用 WatchedFileHandler 来写日志,多个进程可以写同一个日志文件。 有切日志的需求,用 logrotate 来切。 |