推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
billion
V2EX  ›  Python

多进程操作如何正确使用 Python logging TimedRotatingFileHandler

  •  
  •   billion ·
    kingname · Dec 23, 2015 · 6854 views
    This topic created in 3970 days ago, the information mentioned may be changed or developed.
    楼主有 24 台服务器,上面的某个程序会使用 Python logging 来写 Log ,使用 TimedRotatingFileHandler 来让 Log 在每天午夜自动添加时间后缀。 Log 存放在一台服务器上,所有的其他服务器都来写这一个 Log 文件。

    这样就会导致在午夜更新文件名的时候,出现 Windows Error 32 , 因为这个文件还在被其他 logging 占用,所以无法正常修改文件名。

    请教各位,如何才能解决这个问题。
    8 replies  •  2015-12-25 21:27:22 +08:00
    tolbkni
    tolbkni
    Dec 23, 2015
    1
    可以用 RemoteSyslogHandler 发送到 syslog 后端,用 logrotate 来切分日志
    knightdf
    knightdf
    Dec 23, 2015
    2
    多进程下 python 的 RotatingFileHandler 有 BUG 的,自己重写下 doRollover 函数就好了,我都是自己改写的。
    class MultiProcessTimedRotatingFileHandler(TimedRotatingFileHandler)
    mouer
    mouer
    Dec 24, 2015
    3
    启动一个记录 log 的 python 程序,然后用 sockerHandler 写到这个程序上,这个程序再用 TimedRotatingFileHandler
    mulog
    mulog
    Dec 24, 2015
    4
    我是另起了一个进程 如 @mouer 所说用 SocketHandler
    billion
    billion
    OP
    Dec 24, 2015
    5
    @mouer 这确实是一个好的办法。但是由于网络存在不可信的因素,所以这样做的话,可能会漏掉 log.
    Jordan
    Jordan
    Dec 24, 2015
    6
    @tolbkni 正解
    billion
    billion
    OP
    Dec 24, 2015
    7
    @tolbkni 似乎只种方式只能在 Unix 下面使用, Windows 下面就不行了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1767 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 16:59 · PVG 00:59 · LAX 08:59 · JFK 11:59
    ♥ Do have faith in what you're doing.