logv4初始化一定要到主函數啓動後初始化!在main函数前全局变量初始化会报错log4cplus:ERROR Unrecognized log level: TRACE
linux编译出来的动态库可以到500k。可以用strip命令瘦身。在tests目录下有各样例子。
写了个小程序测试。参考filter_test:
历史版本下载:log4cplus - Browse /log4cplus-stable at SourceForge.net
配置文件:
#log4cplus.rootLogger=TRACE, STDOUT, ALL_MSGS, TRACE_MSGS, DEBUG_INFO_MSGS, FATAL_MSGS
#这里支持2种输出方式:ALL_MSGS和STDOUT
log4cplus.rootLogger=TRACE,ALL_MSGS,STDOUT
#STDOUT配置为console输出
log4cplus.appender.STDOUT=log4cplus::ConsoleAppender
log4cplus.appender.STDOUT.layout=log4cplus::PatternLayout
#输出格式:%d日期{格式}%l文件名和行号;%p打印等级,日志等级:(TRACE<DEBUG<INFO<WARN<ERROR<FATAL);%c日志logr;%m就是我们输入的字符串;%n换行;%F文件名;%L行号。
log4cplus.appender.STDOUT.layout.ConversionPattern=[%d{%y-%m-%d %H:%M:%S.%q}][%l][%-5p,%c{2}]%m%n
#ALL_MSGS写文件,Append表示追加,RollingFileAppender表示循环覆盖,就是文件到了500K,就会保存到all_msgs.log.1中。也就是有all_msgs.log和all_msgs.log.1两个文件。。。还有FileAppender ,DailyRollingFileAppender都会导致log文件增大。
log4cplus.appender.FA.MaxBackupIndex=10 最大备份最大个数,应该是默认2
log4cplus.appender.ALL_MSGS=log4cplus::RollingFileAppender
log4cplus.appender.ALL_MSGS.File=all_msgs.log
log4cplus.appender.ALL_MSGS.layout=log4cplus::TTCCLayout
log4cplus.appender.ALL_MSGS.Append=true
log4cplus.appender.ALL_MSGS.ReopenDelay=10
log4cplus.appender.ALL_MSGS.MaxFileSize=500KB
log4cplus.appender.ALL_MSGS.MaxBackupIndex=10
log4cplus.appender.ALL_MSGS.layout=log4cplus::PatternLayout
log4cplus.appender.ALL_MSGS.layout.ConversionPattern=[%d{%y-%m-%d %H:%M:%S.%q}]%c,%-5p[%l]%m%n
#log4cplus.appender.TRACE_MSGS=log4cplus::RollingFileAppender
#log4cplus.appender.TRACE_MSGS.File=trace_msgs.log
#log4cplus.appender.TRACE_MSGS.layout=log4cplus::TTCCLayout
#指定打印等级
#log4cplus.appender.TRACE_MSGS.filters.1=log4cplus::spi::LogLevelMatchFilter
#log4cplus.appender.TRACE_MSGS.filters.1.LogLevelToMatch=TRACE
#log4cplus.appender.TRACE_MSGS.filters.1.AcceptOnMatch=true
#log4cplus.appender.TRACE_MSGS.filters.2=log4cplus::spi::DenyAllFilter
#log4cplus.appender.DEBUG_INFO_MSGS=log4cplus::RollingFileAppender
#log4cplus.appender.DEBUG_INFO_MSGS.File=debug_info_msgs.log
#log4cplus.appender.DEBUG_INFO_MSGS.layout=log4cplus::TTCCLayout
#指定打印等级的范围。
#log4cplus.appender.DEBUG_INFO_MSGS.filters.1=log4cplus::spi::LogLevelRangeFilter
#log4cplus.appender.DEBUG_INFO_MSGS.filters.1.LogLevelMin=DEBUG
#log4cplus.appender.DEBUG_INFO_MSGS.filters.1.LogLevelMax=INFO
#log4cplus.appender.DEBUG_INFO_MSGS.filters.1.AcceptOnMatch=true
#log4cplus.appender.DEBUG_INFO_MSGS.filters.2=log4cplus::spi::DenyAllFilter
#log4cplus.appender.FATAL_MSGS=log4cplus::RollingFileAppender
#log4cplus.appender.FATAL_MSGS.File=fatal_msgs.log
#log4cplus.appender.FATAL_MSGS.layout=log4cplus::TTCCLayout
#log4cplus.appender.FATAL_MSGS.filters.1=log4cplus::spi::StringMatchFilter
#log4cplus.appender.FATAL_MSGS.filters.1.StringToMatch=FATAL
#log4cplus.appender.FATAL_MSGS.filters.1.AcceptOnMatch=true
#log4cplus.appender.FATAL_MSGS.filters.2=log4cplus::spi::DenyAllFilter
程序:
#include <log4cplus/logger.h>
#include <log4cplus/configurator.h>
#include <log4cplus/spi/loggingevent.h>
#include <log4cplus/helpers/loglog.h>
#include <log4cplus/helpers/stringhelper.h>
#include <log4cplus/helpers/fileinfo.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/consoleappender.h>
#include <log4cplus/initializer.h>
#include <unistd.h>
using namespace std;
using namespace log4cplus;
using namespace log4cplus::spi;
using namespace log4cplus::helpers;
void
printDebug(Logger logger)
{
//Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("log"));
LOG4CPLUS_TRACE_METHOD(logger, LOG4CPLUS_TEXT("::printDebug()"));
LOG4CPLUS_DEBUG(logger, "This is a DEBUG message");
LOG4CPLUS_INFO(logger, "This is a INFO message");
LOG4CPLUS_WARN(logger, "This is a WARN message");
LOG4CPLUS_ERROR(logger, "This is a ERROR message");
LOG4CPLUS_FATAL(logger, "This is a FATAL message");
LOG4CPLUS_INFO(logger, "visible");
LOG4CPLUS_INFO(logger, "invisible");
}
int
main(int argc, char * argv[])
{
tcout << "Entering main()..." << endl;
log4cplus::Initializer initializer;
LogLog::getLogLog()->setInternalDebugging(false);//关闭库内部打印
Logger root = Logger::getRoot();
Logger mylogg = Logger::getInstance(LOG4CPLUS_TEXT("logr"));
//PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log4cplus.properties"));
//这种方式可以在程序运行中修改配置文件。
ConfigureAndWatchThread configureThread(
LOG4CPLUS_TEXT("log4cplus.properties"), 5 * 1000);
while(1)
{
printDebug(root);
printDebug(mylogg);
usleep(3000000);
}
return 0;
}