[[PageNavi(NavigationList)]]
==== サンプル13 testPropertyConfig.cpp ====
[Properties log4cppの設定ファイル]を使用し、ログ出力を行うサンプルです。
===== 関連ファイル =====
* testPropertyConfig.cpp
* testConfig.log4cpp.properties
===== ファイルの中身 =====
testPropertyConfig.cpp[[BR]]
{{{ code cpp
// testConfig.cpp : Derived from testPattern.cpp.
//
#include <log4cpp/Portability.hh>
#ifdef WIN32
#include <windows.h>
#endif
#ifdef LOG4CPP_HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <cstdlib>
#include <log4cpp/Category.hh>
#include <log4cpp/Appender.hh>
#include <log4cpp/OstreamAppender.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/Layout.hh>
#include <log4cpp/BasicLayout.hh>
#include <log4cpp/Priority.hh>
#include <log4cpp/NDC.hh>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/PropertyConfigurator.hh>
double calcPi()
{
double denominator = 3.0;
double retVal = 4.0;
long i;
for (i = 0; i < 50000000l; i++)
{
retVal = retVal - (4.0 / denominator);
denominator += 2.0;
retVal = retVal + (4.0 /denominator);
denominator += 2.0;
}
return retVal;
}
int main(int argc, char* argv[])
{
try {
/* looking for the init file in $srcdir is a requirement of
automake's distcheck target.
*/
char* srcdir = std::getenv("srcdir");
std::string initFileName;
if (srcdir == NULL) {
initFileName = "./testConfig.log4cpp.properties";
}
else {
initFileName = std::string(srcdir) + "/testConfig.log4cpp.properties";
}
log4cpp::PropertyConfigurator::configure(initFileName);
} catch(log4cpp::ConfigureFailure& f) {
std::cout << "Configure Problem " << f.what() << std::endl;
return -1;
}
log4cpp::Category& root = log4cpp::Category::getRoot();
log4cpp::Category& sub1 =
log4cpp::Category::getInstance(std::string("sub1"));
log4cpp::Category& sub2 =
log4cpp::Category::getInstance(std::string("sub1.sub2"));
root.error("root error");
root.warn("root warn");
sub1.error("sub1 error");
sub1.warn("sub1 warn");
calcPi();
sub2.error("sub2 error");
sub2.warn("sub2 warn");
root.error("root error");
root.warn("root warn");
sub1.error("sub1 error");
sub1.warn("sub1 warn");
#ifdef WIN32
Sleep(3000);
#else
sleep(3);
#endif
sub2.error("sub2 error");
sub2.warn("sub2 warn");
sub2.error("%s %s %d", "test", "vform", 123);
sub2.warnStream() << "streamed warn";
sub2 << log4cpp::Priority::WARN << "warn2.." << "..warn3..value=" << 0
<< log4cpp::eol << "..warn4";
log4cpp::Category::shutdown();
return 0;
}
}}}
testConfig.log4cpp.properties[[BR]]
{{{
# a simple test config
log4j.rootCategory=DEBUG, rootAppender
log4j.category.sub1=,A1
log4j.category.sub2=INFO
log4j.category.sub1.sub2=ERROR, A2
log4j.additivity.sub1.sub2=false
log4j.appender.rootAppender=org.apache.log4j.ConsoleAppender
log4j.appender.rootAppender.layout=org.apache.log4j.BasicLayout
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.fileName=A1.log
log4j.appender.A1.layout=org.apache.log4j.SimpleLayout
log4j.appender.A2=org.apache.log4j.ConsoleAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=The message '%m' at time %d%n
}}}
===== 実行結果例 =====
testPropertyConfig.cppをビルドし、実行した結果です。実行環境はLinux(Ubuntu 11.0)です。
stdout(標準出力):
{{{
1336871833 ERROR : root error
1336871833 WARN : root warn
1336871833 ERROR sub1 : sub1 error
1336871833 WARN sub1 : sub1 warn
The message 'sub2 error' at time 2012-05-13 10:17:14,894
1336871834 ERROR : root error
1336871834 WARN : root warn
1336871834 ERROR sub1 : sub1 error
1336871834 WARN sub1 : sub1 warn
The message 'sub2 error' at time 2012-05-13 10:17:17,897
The message 'test vform 123' at time 2012-05-13 10:17:17,897
}}}
[[PageNavi(NavigationList)]]