2017-08-31 9 views
0

syslog.openlogで、LOG_NDELAY,LOG_NOWAITのようないくつかのログオプションを設定することができます。これは<syslog.h>で定義されています。私はlogging.handlers.SysLogHander上のログオプションのこの種を設定する方法を探していました。Pythonの `logging.handlers.SysLogHander`で` LOG_ * `オプションを設定する

私はLOG_CONSLOG_PERRORを追加でlogging.handersで実装できることを発見しました。ハンドラがインスタンス化されたときに接続が開かれているのでLOG_NDELAYは、既に設定されています。

主に私は、Linuxを使用するので、私は本当に、LOG_NOWAITの気にしません。その後

は、どのように私は LOG_ODELAYまたは LOG_PID設定することができますか?

答えて

1

the source for syslog.openlogを見ると、それが直接openlog(3)にオプションの整数を渡します。

ダイビングが深くなると、glibcのopenlogopenlog_internalと呼ばれ、LogStatグローバルに設定されます。

それでは、あなたがopenlog(3)ドキュメントに必要旗を見てみましょう:

LOG_ODELAY:LOG_NDELAYの逆。 syslog()が呼び出されるまで接続の開始が遅れる。 (これがデフォルトであり、指定する必要はない。)

あなたはSysLogHandlerは行いません。最初の場所でopenlog()を使用場合にのみ関連すると思われます。それだけでconnects to the syslog over UDP

あなたはsyslog.openlog()syslog.syslog()を使用して、あなたの心が望むすべてのフラグを渡すんあなた自身のSyslogFormatterを、実装することができ - STDLIBはこれをしない理由は、私が想像し、syslogモジュールのかもしれませんが、それは移植性がないということです例えば、利用できないWindows。

LOG_PID:各メッセージにPIDを含めます。

これはglibc hereで実装されています。

if (LogStat & LOG_PID) 
    fprintf (f, "[%d]", (int) __getpid()); 

これはlogging already logs process IDs by defaultexposes it to formattersとして、実装が容易です。

だから、単に私が `os.getpid()`が、 `%(プロセス)S`で終わる

"%(levelname)s:%(name)s:%(message)s" 
+0

デフォルトの代わりに

"[%(process)s] %(levelname)s:%(name)s:%(message)s" 

にあなたのフォーマッタの文字列を設定することはあまりありより良い。ありがとう! – soundlake

関連する問題