2013-03-14 23 views
6

我正在使用python sysloghander將日誌發送到集中式syslog服務器。代碼正在工作,但我在定製格式時遇到了一些問題。以下是我寫的代碼。如何在python sysloghandler中設置自定義應用程序名稱

#!/usr/bin/python 

import logging 
from logging.handlers import SysLogHandler 
import subprocess 

hostname = subprocess.check_output(['hostname', '-f']) 
logger = logging.getLogger() 
logger.setLevel(logging.INFO) 
syslog = SysLogHandler(address=('log.central.log', 514)) 
formatter = logging.Formatter('%(asctime)s %(name)s: %(levelname)s %(message)s', '%b %e %H:%M:%S') 
syslog.setFormatter(formatter) 
logger.addHandler(syslog) 
logger.info("My Message") 

是否可以在日誌格式化程序中添加自定義標記/變量。我想添加主機名和app_name,因爲我已經設置了中央日誌記錄服務器來根據主機名和app_name創建日誌文件。

App_name可以是任何東西,例如我可以將app_name設置爲「mysql_communication_log」或「wsgi_log」,然後在中央服務器上創建具有相同名稱的單獨文件。

我所尋找的是類似

formatter = logging.Formatter('%(asctime)s %(hostname)s %(app_name)s: %(message)s', '%b %e %H:%M:%S') 

回答

2

您可以使用$syslogfacility-text(見docs) - 它可以讓你輕鬆地過濾由謂詞日誌消息。

因此,在客戶端,這將是水木清華這樣的:

hostname = "stage-server" 
formatter = logging.Formatter('{}:%(asctime)s %(name)s: %(levelname)s %(message)s'.format(hostname), '%b %e %H:%M:%S') 

而且在你rsyslog.conf

if $syslogfacility-text == 'stage-server' then /var/log/stage-server/my.log 

希望有所幫助。

相關問題