c++ - 如何压缩备份日志文件?

标签 c++ logging log4cplus

我在我的项目中使用 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 压缩备份日志?

    在某个帖子里我看到了这样的回复:

    I need to create my own appender, inheriting from RollingFileAppender and then add a compression steps.

    如果可能的话,谁能告诉我怎么做,好吗?我不知道如何实现它。

  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
    }
}

关于c++ - 如何压缩备份日志文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20161212/

相关文章:

c++ - 'parse': 不是 boost::spirit::x3::unused_type 的成员

c++ - 在 qtablewidget 顶部插入行

c# - 如何记录和跟踪 .net 应用程序的异常

ios - 此体系结构 ios 不支持线程本地存储

c++ - fork() 之后 log4cplus 会发生什么?

c++ - Qt: QGraphicsScene 鼠标位置总是 (0,0)

python - SCons:单个 SConscript 文件中的不同 variant_dir

grails - 为什么我不能让我的记录器写入 Grails 中的文件附加程序?

java.util.logging - 如何强制所有记录器遵守应用程序运行时中给定的格式? (HSQL数据库)

c++ - Log4cplus真的这么慢吗?