2013-03-14 9 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") 

カスタムタグ/変数をログフォーマッタに追加することは可能ですか?私はhostnameとapp_nameに基づいてログファイルを作成するために、セットアップ用の中央ロギングサーバーを持っているので、hostnameとapp_nameを追加したいと思います。

app_nameはapp_nameに "mysql_communication_log"または "wsgi_log"を設定することができます。次に、中央サーバーで別々のファイルが同じ名前で作成されます。私が探しています何

は(docsを参照)

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

答えて

2

のようなものは、あなたが$syslogfacility-textを利用することができている - それはあなたが簡単に述語によってログメッセージをフィルタリングすることができます。

そうでは、クライアント側で、それはのようになめらかになります:

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 

お役に立てば幸いです。

関連する問題