2013-03-14 6 views
6

मैं एक केंद्रीकृत syslog सर्वर पर लॉग भेजने के लिए एक अजगर sysloghander पर काम कर रहा हूँ। कोड काम कर रहा है लेकिन प्रारूप को अनुकूलित करने में मुझे कुछ मुद्दों का सामना करना पड़ रहा है। नीचे कोड है जो मैंने लिखा है।पाइथन 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 के आधार पर लॉग फ़ाइलों को बनाने के लिए केंद्रीय लॉगिंग सर्वर सेटअप किया है।

ऐप_नाम कुछ भी हो सकता है, जैसे कि मैं "mysql_communication_log" या "wsgi_log" पर app_name सेट कर सकता हूं, फिर केंद्रीय सर्वर पर अलग-अलग फ़ाइलों को उसी नाम से बनाया जाएगा।

मैं क्या देख रहा हूँ की तरह

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 

आशा है कि मदद करता है।

संबंधित मुद्दे