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() を使用します アクティブなシステム ロギング プログラムにデータを送信する機能。
こちらのマニュアル ページを参照してください。