C プログラムからログを記録する標準的な方法は syslog
です .
ヘッダー ファイルを含めることから始めます。
#include <syslog.h>
次に、プログラムの早い段階で、openlog
を呼び出して syslog を構成する必要があります。 :
openlog("programname", 0, LOG_USER);
最初の引数は、各メッセージの開始時に自動的に追加される ID またはタグです。ここにプログラムの名前を入力してください。
2 番目の引数は、使用するオプション、または 0
です。 正常な動作のために。オプションの完全なリストは man 3 syslog
にあります . LOG_PID
が役に立つかもしれません 、これにより、syslog もログ メッセージにプロセス ID を記録します。
次に、ログ メッセージを書きたいときは毎回 syslog
を呼び出します。 :
syslog(LOG_INFO, "%s", "Message");
最初の引数は優先順位です。優先度は DEBUG
から (重要でない) EMERG
まで (緊急時のみ) DEBUG
付き 、 INFO
、および ERR
最も一般的に使用されています。 man 3 syslog
を参照 あなたのオプションのために。
2 番目と 3 番目の引数は、printf と同様に、フォーマットとメッセージです。
これが表示されるログ ファイルは、syslog の設定によって異なります。
デフォルトの設定では、おそらく /var/log/messages
に入ります .
LOG_LOCAL0
の範囲内のいずれかの機能を使用して、カスタム ログ ファイルを設定できます。 LOG_LOCAL7
へ .
以下を変更して使用します:
openlog("programname", 0, LOG_USER);
へ
openlog("programname", 0, LOG_LOCAL0);
または
openlog("programname", 0, LOG_LOCAL1);
など
対応するエントリを /etc/syslog.conf
に追加します 、例
local1.info /var/log/programname.log
syslog サーバーを再起動します。例:
pkill -HUP syslogd
.info
local1.info
の一部 上記は INFO
であるすべてのメッセージを意味します INFO
を含む、またはそれ以上の重要なものがログに記録されます 、 NOTICE
、 ERR
(エラー)、CRIT
(クリティカル) など、ただし DEBUG
以外 .
または、rsyslog
がある場合 、プロパティ ベースのフィルタを試すことができます。たとえば、
:syslogtag, isequal, "programname:" /var/log/programname.log
syslogtag には「:」を含める必要があります。
または、ソフトウェアを他の人に配布する予定がある場合は、LOG_LOCAL
の使用に頼るのはおそらく得策ではありません。 または rsyslog
フィルタします。
その場合、 LOG_USER
を使用する必要があります (通常のプログラムの場合) または LOG_DAEMON
(サーバーの場合) syslog
を使用して起動メッセージとエラー メッセージを記述します。 、ただし、すべてのログ メッセージを syslog
以外のファイルに書き込みます .たとえば、Apache HTTPd は /var/log/apache2/*
にログを記録します または /var/log/httpd/*
、通常の open
を使用していると仮定します /fopen
そして write
/printf
あなたは #include <syslog.h>
したくなるでしょう 、次に syslog()
を使用します アクティブなシステム ロギング プログラムにデータを送信する機能。
こちらのマニュアル ページを参照してください。