2013-11-23 88 views
1

我在我的項目中使用log4cplus進行日誌記錄。如何壓縮備份日誌文件?

我創建了logger.conf,我將在我的應用程序開始時加載它。

這是我logger.conf:

log4cplus.appender.Developer=log4cplus::RollingFileAppender 
log4cplus.appender.Developer.DatePattern = ".yyyy-MM-dd" 
log4cplus.appender.Developer.Schedule = HOURLY 
log4cplus.appender.Developer.File=log/developer.log 
log4cplus.appender.Developer.MaxFileSize=3MB 
log4cplus.appender.Developer.MaxBackupIndex=10 
log4cplus.appender.Developer.layout=log4cplus::PatternLayout 
log4cplus.appender.Developer.layout.ContextPrinting=enabled 
log4cplus.appender.Developer.layout.ConversionPattern=%D{%Y-%m-%d %H:%M:%S,%Q} [%t] %p - %m%n 
log4cplus.appender.Developer.Threshold=TRACE 
log4cplus.logger.DEVELOPER=TRACE, Developer 

這是我如何加載我logger.conf:

QString log_path = qApp->applicationDirPath() + "/log"; 
QDir().mkpath(log_path); 
PropertyConfigurator logger(L"configs/logger.conf", Logger::getDefaultHierarchy()); 
logger.configure(); 

每當我想記錄,我用的是以下行:

Logger::getInstance(L"DEVELOPER").log(INFO_LOG_LEVEL, L".............."); 

我想知道兩件事:

  1. 如何告訴Log4Cplus壓縮備份日誌?

    在一些文章中,我看到了這樣的答覆:

    我需要創建自己的appender,從RollingFileAppender繼承,然後添加一個壓縮步驟。

    如果可能的話,誰能告訴我該怎麼做?我不知道如何實現這一點。

  2. 如何將模式添加到這些備份日誌的名稱?

    目前,Log4Cplus讓我生氣是這樣的:

    developer.log.1 
    developer.log.2 
    developer.log.3 
    ... 
    

    我想日期和時間添加到它。

回答

0

你需要實現你自己的Appender是這樣的:

class NewFileAppender : public ::log4cplus::RollingFileAppender 
{ 

void 
newFileAppender::rollover() 
{ 
    helpers::LogLog & loglog = getLogLog(); 

    // Close the current file 
    out.close(); 
    out.clear(); // reset flags since the C++ standard specified that all the 
       // flags should remain unchanged on a close 

    // If maxBackups <= 0, then there is no file renaming to be done. 
    if (maxBackupIndex > 0) 
    { 
     rolloverCompressedFiles(filename, maxBackupIndex); 

     // Rename fileName to fileName.DATE 
     tstring target = filename + DATE; 

     int ret; 

     ret = file_rename (filename, target); 
     //TODO: compress using zlib 
    } 
} 

}