[[PageNavi(NavigationList)]]
==== 出力先ファイル名にプログラムの起動日時を入れる ====
{{{ html
<span style="float:right">
}}}
{{{ GoogleAdsense
<script type="text/javascript"><!--
google_ad_client = "ca-pub-0702888637712330";
/* 20120131 */
google_ad_slot = "8641490082";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
}}}
{{{ html
</span>
}}}
log4cppには出力ファイルのサイズでローリングする、すなわち、指定した最新のバイト数のログだけを残すということはできます([http://log4cpp-jp.sourceforge.jp/api/classlog4cpp_1_1RollingFileAppender.html RollingFileAppender])。ですが、例えば、1週間分のログだけを残したいといった場合にはlog4cppは対応していません。[[BR]]
ここでは、簡易的に対応する方法を説明します。
===== 考え方 =====
独自のAppenderを作成すればもちろん可能ですが、このやり方だと、設定ファイルによる読み込み部分までlog4cppを改造することになり、面倒ですから、極力、既にあるlog4cppの機能でどうにかならないか考えます。
さて、その方法ですが、FileAppenderあるいはRollingFileAppenderの出力先ファイル名(パス)に日付を含めてしまおうというものです。[[BR]]
やり方は、まず、環境変数(名前は何でも良い)に日付(「/」などファイルパスに使用できない文字を取り除いたもの)を設定します。[[BR]]
そして、設定ファイルにてファイル名を設定するところで、その環境変数を参照するようにすればOKです。
===== 例(Linux) =====
設定ファイルの例:
{{{
rootCategory=DEBUG, A4
appender.A4=org.apache.log4j.FileAppender
appender.A4.fileName=log${NowDate}.log
appender.A4.layout=org.apache.log4j.BasicLayout
}}}
ファイル名のところに環境変数「!NowDate」を指定しています。
プログラムの例:
{{{ code cpp
#include <log4cpp/Category.hh>
#include <log4cpp/PropertyConfigurator.hh>
int main(void){
const char* propFileName = "props.properties";
log4cpp::PropertyConfigurator::configure( propFileName );
log4cpp::Category& root = log4cpp::Category::getRoot();
root.error("message");
log4cpp::Category::shutdown();
return 0;
}
}}}
環境変数設定の例:
{{{
NowDate=`date +%y%m%d`
export NowDate
}}}
実行結果の例(※実施日:2012/04/27):
{{{
takashi@takashi-virtual-machine:~/デスクトップ/ctest4$ ls
a.out log120427.log main.cpp props.properties
}}}
「log120427.log」が生成されていますね!
[[PageNavi(NavigationList)]]