• Showing Page History #78574

Show page source of OutputFileNameWithStartDate #80603

[[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)]]