首页 > 未分类 > LOG4PLUS-基础
2017五月23

LOG4PLUS-基础

参考:https://my.oschina.net/lovecxx/blog/185951

脚本配置参考:http://blog.csdn.net/shelsea_x/article/details/11894817

按时间或日期http://blog.csdn.net/u010607621/article/details/54944696


FileAppender类实现了基本的文件操作功能,构造函数如下:

        FileAppender(const log4cplus::tstring& filename,
                     std::ios_base::openmode mode = std::ios_base::trunc,
                     bool immediateFlush = true,
                     bool createDirs = false);

filename: 文件名;

mode: 文件类型,可选择的文件类型包括app、ate、binary、in、out、trunc,缺省是trunc,表示将先前文件删除。app表示追加

immediateFlush :缓冲刷新标志,如果为true表示每向文件写一条记录就刷新一次缓存,否则直到FileAppender被关闭或文件缓存已满才更新文件,默认true。

  

//——————————————-

RollingFileAppender类可以根据预先设定的大小来决定是否转储,当超过该大小,后续log信息会另存到新文件中,除了定义每个记录文件的大小之外,还要确定在RollingFileAppender类对象构造时最多需要多少个这样的记录文件(maxBackupIndex+1),当存储的文件数目超过maxBackupIndex+1时,会删除最早生成的文件,保证整个文件数目等于maxBackupIndex+1,然后继续记录。

构造函数如下:

   RollingFileAppender(const log4cplus::tstring& filename,
                            long maxFileSize = 10*1024*1024, // 10 MB
                            int maxBackupIndex = 1,
                            bool immediateFlush = true,
                            bool createDirs = false);

filename : 文件名

maxFileSize : 文件的最大尺寸,尺寸小于200k时等于200k,即MINIMUM_ROLLING_LOG_SIZE

maxBackupIndex : 最大记录文件数

immediateFlush : 缓冲刷新标志

  

//——————————————-

DailyRollingFileAppender类可以根据你预先设定的频度来决定是否转储,当超过该频度,后续log信息会另存到新文件中,这里的频度包括:MONTHLY (每月)、WEEKLY(每周)、DAILY(每日)、TWICE_DAILY(每两天)、HOURLY(每时)、MINUTELY(每分)

  DailyRollingFileAppender(const log4cplus::tstring& filename,
                                 DailyRollingFileSchedule schedule = DAILY,
                                 bool immediateFlush = true,
                                 int maxBackupIndex = 10,
                                 bool createDirs = false,
                                 bool rollOnClose = true,
                                 const log4cplus::tstring& datePattern = log4cplus::tstring());

 

示例代码:

		log4cplus::initialize ();
		/*
		RollingFileAppender类可以根据预先设定的大小来决定是否转储,当超过该大小,后续log信息会另存到新文件中,
		除了定义每个记录文件的大小之外,还要确定在RollingFileAppender类对象构造时最多需要多少个这样的记录文件(maxBackupIndex+1),当存储的文件数目超过maxBackupIndex+1时,会删除最早生成的文件,保证整个文件数目等于maxBackupIndex+1,然后继续记录
		*/
		//SharedFileAppenderPtr append_1(new RollingFileAppender(LOG4CPLUS_TEXT("GP.log"), 5*1024, 0, false, true));/// 最小为MINIMUM_ROLLING_LOG_SIZE = 200*1024L;
		/*

		*/
		//SharedFileAppenderPtr append_1(new FileAppender(LOG4CPLUS_TEXT("GP.log"), std::ios_base::app,true,true));
		SharedFileAppenderPtr append_1(new DailyRollingFileAppender(LOG4CPLUS_TEXT("GP.log"),DAILY,true,1,true));
		append_1->setLayout(std::auto_ptr<Layout>(new TTCCLayout()));
		m_root = Logger::getInstance(LOG4CPLUS_TEXT("[GP]"));
		m_root.addAppender(SharedAppenderPtr(append_1.get()));
		m_root.setLogLevel(ALL_LOG_LEVEL);

特别注意的是,如果只想打印某一level的log,需要使用

log4cplus.appender.RR.filters.1.LogLevelMin=INFO
log4cplus.appender.RR.filters.1.LogLevelMax=INFO

而不是

log4cplus.appender.append_1.filters.1.LogLevelToMatch=INFO

后者会把大于INFO的LOG全打印出来

还有部分配置参数可以搜getProperty

FileAppenderBase::FileAppenderBase(const Properties& props,
                                   std::ios_base::openmode mode_)
    : Appender(props)
    , immediateFlush(true)
    , createDirs (false)
    , reopenDelay(1)
    , bufferSize (0)
    , buffer (0)
{
    filename = props.getProperty(LOG4CPLUS_TEXT("File"));
    lockFileName = props.getProperty (LOG4CPLUS_TEXT ("LockFile"));
    localeName = props.getProperty (LOG4CPLUS_TEXT ("Locale"), LOG4CPLUS_TEXT ("DEFAULT"));
    props.getBool (immediateFlush, LOG4CPLUS_TEXT("ImmediateFlush"));
    props.getBool (createDirs, LOG4CPLUS_TEXT("CreateDirs"));
    props.getInt (reopenDelay, LOG4CPLUS_TEXT("ReopenDelay"));
    props.getULong (bufferSize, LOG4CPLUS_TEXT("BufferSize"));

支持环境变量:

配置文件的路径 :
${ LOG4C_RCPATH }/log4crc  //环境变量中设置的配置文件夹下log4crc
${HOME}/.log4crc        //HOME文件夹下log4crc 
./log4crc           //当前可执行文件夹下log4crc


示例 :

log4cplus.rootLogger=TRACE,RR
log4cplus.appender.RR=log4cplus::TimeBasedRollingFileAppender  
log4cplus.appender.RR.FilenamePattern=${appdata}/log/%d{yyyy-MM-dd}_GPlatform.log
#log4cplus.appender.RR.Append=true  
log4cplus.appender.RR.MaxHistory=3
log4cplus.appender.RR.CleanHistoryOnStart=true 
log4cplus.appender.RR.ImmediateFlush=true  
#如果为true,在程序关闭时会清空log
log4cplus.appender.RR.RollOnClose=false 
log4cplus.appender.RR.CreateDirs=true  
log4cplus.appender.RR.layout=log4cplus::TTCCLayout 

#过滤level,注意,这个执行是从后向前的,也就是先执行2关闭所有的过滤器,再执行1
log4cplus.appender.RR.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.RR.filters.1.LogLevelMin=INFO
log4cplus.appender.RR.filters.1.LogLevelMax=INFO
log4cplus.appender.RR.filters.1.AcceptOnMatch=true
log4cplus.appender.RR.filters.2=log4cplus::spi::DenyAllFilter

文章作者:hgy413
本文地址:http://hgy413.com/4043.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

本文目前尚无任何评论.

发表评论