[DJANGO]uwsgi worker + django 的模式下,如何处理logging这个问题

233 views
Skip to first unread message

Catstyle Lee

unread,
Nov 19, 2013, 9:48:46 PM11/19/13
to pyth...@googlegroups.com
现在有个情况是这样的
django运行在uwsgi上,并且在nginx后面,uwsgi起了N个worker
django设置了logging,但是指向了同一个TimedRotatingFileHandler的文件

问题出现在log翻转的时候,有出现两个log,一个是正在使用的L.log,一个是昨天的L.log.xx-xx
但是两个log的内容都是今天的log,并且是不同的进程写的
进程A把log写到了L.log,进程B把log写到了L.log.xx-xx

查了一下资料,是python的logging不支持多进程造成的
也有一些候选的修改方案,比如自己写个socket_server/找支持多进程的logging库
但是改起来动静就有点大了,最好不要这么改...
现在来问问看有没有更方便简洁的解决方案么有=。=

--
BR,
/Catstyle_Lee

AR (aka AleiPhoenix)

unread,
Nov 19, 2013, 10:06:38 PM11/19/13
to CPyUG
2013/11/20 Catstyle Lee <catsty...@gmail.com>
Flask + uwsgi 多 worker 似乎没遇到这个问题。

某随便想了一个,不一定靠谱。

handler 那里 emit 搞个排它 (比如用 threading.Lock) 担心性能的话还可以搞个 buffer ?  

--
Silence is golden.

twitter: @AccelReality
wikipedia: AleiPhoenix
blog: weblog.areverie.org
wiki: wiki.areverie.org

cougar2008

unread,
Nov 19, 2013, 10:12:54 PM11/19/13
to python-cn
线上的异常啥的都是用sentry收集了


--
--
邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
详情: http://code.google.com/p/cpyug/wiki/CpyUg
G+: https://plus.google.com/u/0/communities/108786798869709602787
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
---
您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 python-cn+...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。

Catstyle Lee

unread,
Nov 19, 2013, 10:24:12 PM11/19/13
to pyth...@googlegroups.com
嗯,谢谢
sentry之前有同事提起过,貌似比较符合这种场景
只不过一直都没有尝试过
空了看看能不能解决这个问题

现在找了个mlogging来替换掉logging的class
暂时没发现问题~


2013/11/20 cougar2008 <couga...@gmail.com>



--
BR,
/Catstyle_Lee

est

unread,
Nov 19, 2013, 10:36:58 PM11/19/13
to pyth...@googlegroups.com
http://uwsgi-docs.readthedocs.org/en/latest/Logging.html

http://uwsgi-docs.readthedocs.org/en/latest/PythonModule.html#uwsgi.log

现成的不用非得去搞个第三方组件。。。

能超过uWSGI集群log能力的解决方案屈指可数。



2013/11/20 Catstyle Lee <catsty...@gmail.com>

--

Shell Xu

unread,
Nov 19, 2013, 11:10:13 PM11/19/13
to CUPG
某还在用古典的syslog方案,单独开个facility,然后直接存。
好处是可以直接打到任何一台服务器上去。坏处是单点。
--
彼節者有間,而刀刃者無厚;以無厚入有間,恢恢乎其於游刃必有餘地矣。
blog: http://shell909090.com/blog/
about.mehttp://about.me/shell909090

wych

unread,
Nov 19, 2013, 11:28:11 PM11/19/13
to pyth...@googlegroups.com
syslog 可以配合rsyslog用
于 2013年11月20日 12:10, Shell Xu 写道:
> 某还在用古典的syslog方案,单独开个facility,然后直接存。
> 好处是可以直接打到任何一台服务器上去。坏处是单点。
>
>
> 在 2013年11月20日上午11:36,est <electr...@gmail.com
> <mailto:electr...@gmail.com>>写 道:
>
> http://uwsgi-docs.readthedocs.org/en/latest/Logging.html
>
> http://uwsgi-docs.readthedocs.org/en/latest/PythonModule.html#uwsgi.log
>
> 现成的不用非得去搞个第三方组件。。。
>
> 能超过uWSGI集群log能力的解决方案屈指可数。
>
>
>
> 2013/11/20 Catstyle Lee <catsty...@gmail.com
> <mailto:catsty...@gmail.com>>
>
> 现在有个情况是这样的
> django运行在uwsgi上,并且在nginx后面,uwsgi起了N个worker
> django设置了logging,但是指向了同一个 TimedRotatingFileHandler
> 的文件
>
> 问题出现在log翻转的时候,有出现两个log,一个是正在使用的
> L.log,一个是昨天的 L.log.xx-xx
> 但是两个log的内容都是今天的log,并且是不同的进程写的
> 进程A把log写到了L.log,进程B把log写到了L.log.xx-xx
>
> 查了一下资料,是python的logging不支持多进程造成的
> 也有一些候选的修改方案,比如自己写个socket_server/找支持多进程
> 的 logging库
> 但是改起来动静就有点大了,最好不要这么改...
> 现在来问问看有没有更方便简洁的解决方案么有=。=
>
> --
> BR,
> /Catstyle_Lee
> --
> --
> 邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> 发言: pyth...@googlegroups.com
> <mailto:pyth...@googlegroups.com>
> 详情: http://code.google.com/p/cpyug/wiki/CpyUg
> G+: https://plus.google.com/u/0/communities/108786798869709602787
> 严正: 理解列表! 智慧提问!
> http://wiki.woodpecker.org.cn/moin/AskForHelp
> ---
> 您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用
> 户组,CPyUG 邮件列表)”论坛。
> 要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到
> python-cn+...@googlegroups.com
> <mailto:python-cn%2Bunsu...@googlegroups.com>。
> 要查看更多选项,请访问 https://groups.google.com /groups
> /opt_out。 <https://groups.google.com/groups/opt_out%E3%80%82>
>
>
> --
> --
> 邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> 发言: pyth...@googlegroups.com <mailto:pyth...@googlegroups.com>
> 详情: http://code.google.com/p/cpyug/wiki/CpyUg
> G+: https://plus.google.com/u/0/communities/108786798869709602787
> 严正: 理解列表! 智慧提问!
> http://wiki.woodpecker.org.cn/moin/AskForHelp
> ---
> 您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户
> 组,CPyUG 邮件列表)”论坛。
> 要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到
> python-cn+...@googlegroups.com
> <mailto:python-cn%2Bunsu...@googlegroups.com>。
> 要查看更多选项,请访问 https://groups.google.com/groups /opt_out。
> <https://groups.google.com/groups/opt_out%E3%80%82>
>
>
>
>
> --
> 彼節者有間,而刀刃者無厚;以無厚入有間,恢恢乎其於游刃必有餘地矣。
> blog: http://shell909090.com/blog/
> about.me <http://about.me>: http://about.me/shell909090
> --
> --
> 邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> 发言: pyth...@googlegroups.com
> 详情: http://code.google.com/p/cpyug/wiki/CpyUg
> G+: https://plus.google.com/u/0/communities/108786798869709602787
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> ---
> 您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户
> 组,CPyUG 邮件列表)”论坛。
> 要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 python-
> cn+unsu...@googlegroups.com
> 要查看更多选项,请访问 https://groups.google.com /groups/opt_out。
> <https://groups.google.com/groups/opt_out%E3%80%82>

Shell Xu

unread,
Nov 19, 2013, 11:33:34 PM11/19/13
to CUPG
debian默认的就是rsyslog,我比较喜欢syslog-ng。


在 2013年11月20日下午12:28,wych <ellr...@gmail.com>写道:
syslog 可以配合rsyslog用
于 2013年11月20日 12:10, Shell Xu 写道:
某还在用古典的syslog方案,单独开个facility,然后直接存。
好处是可以直接打到任何一台服务器上去。坏处是单点。


在 2013年11月20日上午11:36,est <electr...@gmail.com <mailto:electronixtar@gmail.com>>写 道:


    http://uwsgi-docs.readthedocs.org/en/latest/Logging.html

    http://uwsgi-docs.readthedocs.org/en/latest/PythonModule.html#uwsgi.log

    现成的不用非得去搞个第三方组件。。。

    能超过uWSGI集群log能力的解决方案屈指可数。



    2013/11/20 Catstyle Lee <catsty...@gmail.com
    <mailto:catsty...@gmail.com>>


        现在有个情况是这样的
        django运行在uwsgi上,并且在nginx后面,uwsgi起了N个worker
        django设置了logging,但是指向了同一个 TimedRotatingFileHandler
        的文件

        问题出现在log翻转的时候,有出现两个log,一个是正在使用的
        L.log,一个是昨天的 L.log.xx-xx
        但是两个log的内容都是今天的log,并且是不同的进程写的
        进程A把log写到了L.log,进程B把log写到了L.log.xx-xx

        查了一下资料,是python的logging不支持多进程造成的
        也有一些候选的修改方案,比如自己写个socket_server/找支持多进程
        的 logging库
        但是改起来动静就有点大了,最好不要这么改...
        现在来问问看有没有更方便简洁的解决方案么有=。=

        --         BR,
        /Catstyle_Lee
        --         --         邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
        规则: http://code.google.com/p/cpyug/wiki/PythonCn
        发言: pyth...@googlegroups.com
        <mailto:python-cn@googlegroups.com>

        详情: http://code.google.com/p/cpyug/wiki/CpyUg
        G+: https://plus.google.com/u/0/communities/108786798869709602787
        严正: 理解列表! 智慧提问!
        http://wiki.woodpecker.org.cn/moin/AskForHelp
        ---
        您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用
        户组,CPyUG 邮件列表)”论坛。
        要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到
        <mailto:python-cn%2Bunsu...@googlegroups.com>。
        要查看更多选项,请访问 https://groups.google.com /groups
        /opt_out。 <https://groups.google.com/groups/opt_out%E3%80%82>



    --     --     邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
    规则: http://code.google.com/p/cpyug/wiki/PythonCn

    详情: http://code.google.com/p/cpyug/wiki/CpyUg
    G+: https://plus.google.com/u/0/communities/108786798869709602787
    严正: 理解列表! 智慧提问!
    http://wiki.woodpecker.org.cn/moin/AskForHelp
    ---
    您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户
    组,CPyUG 邮件列表)”论坛。
    要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到
    <mailto:python-cn%2Bunsu...@googlegroups.com>。
    要查看更多选项,请访问 https://groups.google.com/groups /opt_out。
    <https://groups.google.com/groups/opt_out%E3%80%82>





--
彼節者有間,而刀刃者無厚;以無厚入有間,恢恢乎其於游刃必有餘地矣。
blog: http://shell909090.com/blog/
about.me <http://about.me>: http://about.me/shell909090

--
--
邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
详情: http://code.google.com/p/cpyug/wiki/CpyUg
G+: https://plus.google.com/u/0/communities/108786798869709602787
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
---
您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户 组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 python- cn+unsubscribe@googlegroups.com
要查看更多选项,请访问 https://groups.google.com /groups/opt_out。 <https://groups.google.com/groups/opt_out%E3%80%82>

--
--- 您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 python-cn+unsubscribe@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out



--
彼節者有間,而刀刃者無厚;以無厚入有間,恢恢乎其於游刃必有餘地矣。
blog: http://shell909090.com/blog/

AR (aka AleiPhoenix)

unread,
Nov 19, 2013, 11:42:05 PM11/19/13
to CPyUG
2013/11/20 Shell Xu <shell...@gmail.com>
debian默认的就是rsyslog,我比较喜欢syslog-ng。

syslog-ng +1

也是 gentoo manual 里推荐使用的 syslog 实现。 

Catstyle Lee

unread,
Nov 20, 2013, 2:26:37 AM11/20/13
to pyth...@googlegroups.com
之前还没有用过syslog...
去翻了一遍,感觉这个略显重量级啊喂
并且logger是装饰在class上面的,每个class又根据模块的不同有不同的前缀
如gateway.player.xxx,如db.player.xxx,这样的话用是用syslog貌似人工的工作量会有点多

uwsgi的log也是一样的,我能在py里面使用uwsgi.log(),但是上面class-based的特性怎么破...
不过上面的依然不明觉历TvT


2013/11/20 AR (aka AleiPhoenix) <aleip...@gmail.com>

--
--
邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
详情: http://code.google.com/p/cpyug/wiki/CpyUg
G+: https://plus.google.com/u/0/communities/108786798869709602787
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
---
您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 python-cn+...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。



--
BR,
/Catstyle_Lee

YS.Zou

unread,
Nov 20, 2013, 2:37:36 AM11/20/13
to pyth...@googlegroups.com

On 11-20 15:26, Catstyle Lee wrote:

 之前还没有用过syslog...
 去翻了一遍,感觉这个略显重量级啊喂
 并且logger是装饰在class上面的,每个class又根据模块的不同有不同的前缀
 如gateway.player.xxx,如db.player.xxx,这样的话用是用syslog貌似人工的工作量会有点多
 
 uwsgi的log也是一样的,我能在py里面使用uwsgi.log(),但是上面class-based的特性怎么破...
 不过上面的依然不明觉历TvT

你不是使用的 logging 么?

不管你用 syslog 还是别的什么, 应该都不需要你动一行原来的代码的啊, 只需要开始配置 logging 时添加一个对应的 Handler 即可.

--
进出自由才是游戏者的生存之道。

http://zouyesheng.com

Catstyle Lee

unread,
Nov 20, 2013, 3:08:15 AM11/20/13
to pyth...@googlegroups.com
啊啊
又研究了一下,发现自己好无知呀~

要是用syslog的话,指定logging.handlers.SysLogHandler,然后配置syslog进行daily rotate
用uwsgi的话,指定logging.handlers.StreamHandler,配置uwsgi为daemonize,指定log文件,指定--log-reopen
然后没有查询到uwsgi自身的rotate配置,需要用logrotate来进行管理

这是当前我总结的方法,请指正...
以上


2013/11/20 YS.Zou <yeshe...@gmail.com>

--
--
邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
详情: http://code.google.com/p/cpyug/wiki/CpyUg
G+: https://plus.google.com/u/0/communities/108786798869709602787
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
---
您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 python-cn+...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。



--
BR,
/Catstyle_Lee

est

unread,
Nov 20, 2013, 3:52:08 AM11/20/13
to pyth...@googlegroups.com
然后没有查询到uwsgi自身的rotate配置

文档里一搜索rotate就出来了嘛。。。

http://uwsgi-docs.readthedocs.org/en/latest/Options.html#touch-logrotate


2013/11/20 Catstyle Lee <catsty...@gmail.com>

Catstyle Lee

unread,
Nov 20, 2013, 4:00:14 AM11/20/13
to pyth...@googlegroups.com
就是没有找到详细的使用方法呀
看字面感觉是文件被修改了就rotate?
小白...


2013/11/20 est <electr...@gmail.com>



--
BR,
/Catstyle_Lee

limodou

unread,
Nov 20, 2013, 7:41:27 AM11/20/13
to Python.cn@google
使用supervisor来管理的,它可以自动将输出写入日志,并进行分割处理。到是没太注意一条日志会不会在两个日志中出现。


2013/11/20 Catstyle Lee <catsty...@gmail.com>



--
I like python!
UliPad <<The Python Editor>>: http://code.google.com/p/ulipad/
UliWeb <<simple web framework>>: https://github.com/limodou/uliweb
My Blog: http://my.oschina.net/limodou

linbo

unread,
Dec 4, 2013, 4:53:28 AM12/4/13
to pyth...@googlegroups.com
刚开始用 mlogging,但是 TimeRotate会有问题  [issue]
后面换了 https://github.com/mpasternacki/ConcurrentLogHandler,用了FileRotate,写了个crontab 脚本,每天定时分割

在 2013年11月20日星期三UTC+8上午10时48分46秒,村上猫君写道:

lee Alexander

unread,
Dec 4, 2013, 5:32:45 AM12/4/13
to pyth...@googlegroups.com
用sentry...........,这个走得有点远,机器多的时候可以考虑一下


--
--
邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
详情: http://code.google.com/p/cpyug/wiki/CpyUg
G+: https://plus.google.com/u/0/communities/108786798869709602787
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
---
您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 python-cn+...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。



--

Mo Mo

unread,
Dec 4, 2013, 8:47:30 AM12/4/13
to pyth...@googlegroups.com
合适么?前两天想看看一堆4xx的原因,就把级别调到了warning,知道原因之后又赶紧恢复了默认的。


2013/12/4 lee Alexander <superp...@gmail.com>



--
------
iMom0.
------

Catstyle Lee

unread,
Dec 4, 2013, 8:25:51 PM12/4/13
to pyth...@googlegroups.com
mlogging不是多进程的么,如果直接上shutil.move会有问题的吧


2013/12/4 Mo Mo <mobei...@gmail.com>



--
BR,
/Catstyle_Lee
Reply all
Reply to author
Forward
0 new messages