ログファイルの作成

ログファイルの作成

/var/log/にいくつかのデータを保持するために、いくつかのライブラリ関数またはC言語システムコールを使用してLinuxでログファイルを生成する方法はありますか?そして、ログを作成して処理するときにどの基準に従うべきかを知りたいです。ありがとう

ベストアンサー1

Cプログラムが記録する標準的な方法は次のとおりです。syslog

まず、ヘッダファイルを含めます。

#include <syslog.h>

その後、プログラムの最初に次を呼び出してsyslogを設定する必要がありますopenlog

openlog("programname", 0, LOG_USER);

最初のパラメータはIDまたはラベルで、各メッセージの先頭に自動的に追加されます。ここにプログラム名を入力してください。

2番目の引数は、使用したいオプションまたは0通常の動作のオプションです。完全なオプションのリストはにありますman 3 syslog。有用な情報の1つは、LOG_PIDsyslogにログメッセージにプロセスIDを記録させることです。

その後、ログメッセージを書きたいときはいつでも次を呼び出しますsyslog

syslog(LOG_INFO, "%s", "Message");

最初のパラメータは優先順位です。優先順位の範囲はDEBUG(最も重要ではない)からEMERG(緊急状況のみ)まででDEBUG、、、、INFOおよびERRが最も一般的に使用されます。man 3 syslogオプションを確認してください。

2番目と3番目のパラメータはprintfと同様にフォーマットとメッセージです。

これが表示されるログファイルは、システムログの設定によって異なります。

デフォルト設定では、おそらく/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記録されますが、記録されないことを意味します。INFONOTICEERRCRITDEBUG


またはあなたが持っているならrsyslog、次のことを試すことができます。属性ベースのフィルタ、例えば

:syslogtag, isequal, "programname:"    /var/log/programname.log

syslogtagには「:」を含める必要があります。

LOG_LOCALあるいは、ソフトウェアを他の人に配布する計画であれば、使用法やフィルタに頼るのは良い考えではないかもしれませんrsyslog

この場合LOG_USER(通常のプログラムの場合)または(LOG_DAEMONサーバーの場合)開始メッセージとエラーメッセージを書き込む必要がありますsyslogが、すべてのログメッセージは/および/呼び出しを使用して作成する必要があります。syslog/var/log/apache2/*/var/log/httpd/*openfopenwriteprintf

おすすめ記事