. afile1 afile2. : my.logger1 my.logger2. my.logger1, mylog1. my.logger2, mylog2 .
log.properties:
log4cplus.appender.afile1.layout=log4cplus::PatternLayout
log4cplus.appender.afile1.layout.ConversionPattern=%d [ %c{1} ] [ %-5p ] %m%n
log4cplus.appender.afile1=log4cplus::RollingFileAppender
log4cplus.appender.afile1.File=mylog1.log
log4cplus.appender.afile1.MaxFileSize=5MB
log4cplus.appender.afile1.MaxBackupIndex=2
log4cplus.appender.afile2.layout=log4cplus::PatternLayout
log4cplus.appender.afile2.layout.ConversionPattern=%d [ %c{1} ] [ %-5p ] %m%n
log4cplus.appender.afile2=log4cplus::RollingFileAppender
log4cplus.appender.afile2.File=mylog2.log
log4cplus.appender.afile2.MaxFileSize=5MB
log4cplus.appender.afile2.MaxBackupIndex=2
log4cplus.logger.my.logger1=INHERIT, afile1
log4cplus.additivity.my.logger1=false
log4cplus.logger.my.logger2=INHERIT, afile2
log4cplus.additivity.my.logger2=false
:
example.cpp:
#include <iostream>
#include <log4cplus/logger.h>
#include <log4cplus/loglevel.h>
#include <log4cplus/configurator.h>
#include <log4cplus/fileappender.h>
#define MYLOG1_INFO(logEvent) LOG4CPLUS_INFO (log4cplus::Logger::getInstance("my.logger1"), logEvent)
#define MYLOG2_INFO(logEvent) LOG4CPLUS_INFO (log4cplus::Logger::getInstance("my.logger2"), logEvent)
int main(int argc, char**argv)
{
try
{
log4cplus::PropertyConfigurator::doConfigure("log.properties");
}
catch( ... )
{
std::cerr<<"Exception occured while opening log.properties\n";
return -1;
}
MYLOG1_INFO("hello world!");
MYLOG2_INFO("hello world!");
return 0;
}
Makefile ( , log4cplus ):
CXXFLAGS+=-I$(abspath ../log4cplus-1.0.4/include)
all: example.o
$(CXX) $^ $(abspath ../log4cplus-1.0.4/src/.libs/liblog4cplus.a) -lpthread -o test
, , appenders
Log4cplus log4j. log4j.
, log4cplus.sourceforge.net
. log4cplus doxygen.
, %
:
...
log4cplus.appender.afile2.layout.ConversionPattern=[%i] %m%n
...