「ログ」タグアーカイブ

Log4cppでログファイルをローテーションする

プログラム開発でログの出力を行いたいと思います。
今回はC++のプログラムで実装してみます。

まず、なんで今更Log4cppについて記述しようと思ったか説明します。
log4cppのサンプルや記述はネット検索ですぐに見つかります。
でも、上位で検索されたサンプルには間違いがそのまま残されていて、実際に動かしてみるとローテーションは行われませんでした。
また、注意深く見てみると、設定のパラメタすら間違ったままになっているのです。
私は、そのWebサイトの間違いに過去引っかかり、無駄な時間を費やしました。なので、そんな無駄な時間を今後費やすことのないように、ここに記述します。
そちらのサイトを批判するつもりはありませんので、当該サイトのURL等については記述しません。
なお、ここの記載内容に間違いがあった場合には、お手数ですがご指摘して頂けますようお願いします。
こちらのサイトを参考にされる方には、コメント欄に指摘されている内容も含め参考にされることを期待します。
なるべく、修正は行っていくつもりですが・・・将来のことなので、ご注意ください。また、Web上の情報は参考情報です。ご利用に際しては、ご自身の責任でご利用ください。

環境

今回実装を試したのは以下の環境です。

OS:CentOS 7.4
gcc バージョン 4.8.5

 

パッケージインストール

 

プログラム

 

設定

ファイルサイズを102400バイトまでとする。
ログは最大8世代まで残す。

ざっとこんな感じ。

コンパイルは以下のコマンドで行う。

 

CentOS 7におけるrsyslogの設定

CentOS 7をサーバとして、rsyslogでルータのログを残したいと思います。

/etc/sysconfig/rsyslogの設定は必要ありませんでした。
/etc/sysconfig/rsyslogの設定は、syslogd(「r」がない古い)の設定でありrsyslogdの設定ではありませんので、不要ということに気が付きました。
/etc/sysconfig/rsyslogを以下の様に編集しました。

続いて、/etc/rsyslog.confを以下の様に編集しました。

15-16行目:UDPでの受信を有効にするために、コメントを外します。
54-55行目:/evar/log/messagesへそのままログが書き込まれない様に設定する。
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
この行の「local1.none」が影響するのだが、ファシリティの値が何になっているのか確認する必要がある。
ファシリティが解っていないと、情報を指定できない。
今回使用したルータはBuffaloのBHR-4GRVだったので、この値になっている。(http://buffalo.jp/php/lqa.php?id=BUF6516)
76-77行目:ログの出力先を設定する。

取りあえず、rsyslogの設定は完了したので、設定を有効にするためにrsyslogを再起動する。

※なぜか、「rsyslogd」ではなく「rsyslog」(最後に「d」が付かない)であることに注意!
ホンマに再起動しているんか?という感じで返ってくるので、心配な方はrebootしちゃってくださいw

ここまでで、rsyslogの設定は完了なのですが、届かない・・・・(TT)

なんでだろう?

ということで、ファイアウォールで止められていました(^^ゞ
/etc/sysconfig/iptablesに以下の1行を追加してください。

その後、iptablesを再起動します。

これで、ログが残る様になったはずです。

でも。。。。このままだと、ログが延々と同じファイルに書き込まれるのですわ( ;∀;)

ログのローテーションを行うには、、、、多分これで行けるはず!
/etc/logrotate.d/syslogに以下の1行を適当に追加!

どうや!?

しばらくしたら結果が解るだろう?

ということで、後は皆さん信じて待つのみです!