如何压缩备份日志文件

How can I compress backup log files?

本文关键字:备份 日志 文件 压缩 何压缩      更新时间:2023-10-16

我在项目中使用log4cplus进行日志记录。

我创建了logger.conf,并将在应用程序开始时加载它。

这是我的记录器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

这就是我加载日志的方式。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
    ...
    

    我想添加日期和时间。

您需要实现自己的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
    }
}

}