您確實需要爲您的記錄器創建單獨的appender。在我的示例中,我創建了afile1和afile2 appenders。我還創建了兩個記錄器: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
下面是一個例子PROGRAMM:
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是建在父母的dirrectory):
CXXFLAGS+=-I$(abspath ../log4cplus-1.0.4/include)
all: example.o
$(CXX) $^ $(abspath ../log4cplus-1.0.4/src/.libs/liblog4cplus.a) -lpthread -o test
試試這個例子,你應該知道appender是如何工作的
Log4cplus大多是像log4j。所以你可以閱讀log4j的基本原理。 並獲得您需要訪問的類名稱log4cplus.sourceforge.net
關於日誌格式。 log4cplus的文檔僅在doxygen中可用。所以在這裏你可以看到formating in pattern layout
如果你想登錄進程id,比你應該在你的佈局轉換模式中使用%I
例如:
...
log4cplus.appender.afile2.layout.ConversionPattern=[%i] %m%n
...
它將記錄進程ID和消息
它不工作...我把我的問題的更新...可能是我做錯了什麼...所以我把一些代碼... – Novalis 2012-01-09 15:07:41
你正試圖重置根級別記錄器的文件名稱,因此在一切日誌。您需要爲每個組件添加一個單獨的FileAppender以登錄到指定的文件。 – diverscuba23 2012-01-09 16:11:20
可以給一個示例代碼...如何獲得單獨的FileAppender? – Novalis 2012-01-09 16:31:21