因此,我配置了我的Python應用程序以使用Python的SysLogHandler登錄到系統日誌,並且一切正常。除了多線處理。不是我需要如此糟糕地發出多行日誌記錄(我做了一點),但我需要能夠讀取Python的異常。我使用rsyslog 4.2.0的Ubuntu。這就是我得到:萬一系統日誌中的多行日誌記錄
Mar 28 20:11:59 telemachos root: ERROR 'EXCEPTION'#012Traceback (most recent call last):#012 File "./test.py", line 22, in <module>#012 foo()#012 File "./test.py", line 13, in foo#012 bar()#012 File "./test.py", line 16, in bar#012 bla()#012 File "./test.py", line 19, in bla#012 raise Exception("EXCEPTION!")#012Exception: EXCEPTION!
測試代碼,你需要它:
import logging
from logging.handlers import SysLogHandler
logger = logging.getLogger()
logger.setLevel(logging.INFO)
syslog = SysLogHandler(address='/dev/log', facility='local0')
formatter = logging.Formatter('%(name)s: %(levelname)s %(message)r')
syslog.setFormatter(formatter)
logger.addHandler(syslog)
def foo():
bar()
def bar():
bla()
def bla():
raise Exception("EXCEPTION!")
try:
foo()
except:
logger.exception("EXCEPTION")
這可能會爲你的情況下工作,但如果你正在寫一個高容量的併發應用,@尼克的回答會讓你更容易找到與您的堆棧跟蹤全力以赴線。您的解決方案將會在第一行之後丟失所有行的應用程序名稱和級別名稱,從而使搜索變得困難。 – mattbornski 2012-04-26 17:59:02
@mattbornski你不會失去任何信息,它只是不會在同一行。 – 2013-06-20 11:23:34
「失去」我的意思是,在這種情況下,「無法重建」。在高容量的應用程序中,將日誌的含義分成多行,通常會導致不可能在多個請求中的行交錯時重新組合。 – mattbornski 2013-06-20 16:50:37