plog icon indicating copy to clipboard operation
plog copied to clipboard

DynamicAppender can not work good

Open FeJQ opened this issue 1 year ago • 2 comments

I want use MessageOnlyFormatter first, then switch to TxtFormatter, but following code is not working

static plog::DynamicAppender dynamicAppender;
static plog::RollingFileAppender<plog::MessageOnlyFormatter> startupAppender(logFileName.c_str(), logMaxSize, logMaxCount);
static plog::RollingFileAppender<plog::TxtFormatter> normalAppender(logFileName.c_str(), logMaxSize, logMaxCount);

dynamicAppender.addAppender(&startupAppender);

#ifdef QT_DEBUG
    plog::init(plog::debug, &dynamicAppender);
#else
    plog::init(plog::info, &dynamicAppender);
#endif

PLOG(plog::info) << "";
PLOG(plog::info) << "";
PLOG(plog::info) << "======================================";
PLOG(plog::info) << "Start time: " << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss").toStdString();
PLOG(plog::info) << "OS: " << QSysInfo::prettyProductName().toStdString();
PLOG(plog::info) << "Command: " << QCoreApplication::arguments().join(" ").toStdString();
PLOG(plog::info) << "Version: " << QCoreApplication::applicationVersion().toStdString();
PLOG(plog::info) << "======================================";
PLOG(plog::info) << "";

dynamicAppender.removeAppender(&startupAppender);
dynamicAppender.addAppender(&normalAppender);

PLOG(plog::info)<<"Normal mesage";

FeJQ avatar May 13 '24 16:05 FeJQ

I guess if you're on Windows you need to close a file handle in the startupAppender. Here is the sample code:

#include <plog/Log.h>
#include <plog/Initializers/RollingFileInitializer.h>
#include <plog/Appenders/DynamicAppender.h>
#include <plog/Formatters/MessageOnlyFormatter.h>

int main()
{
    const char logFileName[] = "mylog.log";
    const int logMaxSize = 10000000;
    const int logMaxCount = 3;

    static plog::DynamicAppender dynamicAppender;
    static plog::RollingFileAppender<plog::MessageOnlyFormatter> startupAppender(logFileName, logMaxSize, logMaxCount);
    static plog::RollingFileAppender<plog::TxtFormatter> normalAppender(logFileName, logMaxSize, logMaxCount);

    dynamicAppender.addAppender(&startupAppender);

    plog::init(plog::info, &dynamicAppender);

    PLOG(plog::info) << "";
    PLOG(plog::info) << "";
    PLOG(plog::info) << "======================================";
    PLOG(plog::info) << "Start time: ";
    PLOG(plog::info) << "OS: ";
    PLOG(plog::info) << "Command: ";
    PLOG(plog::info) << "Version: ";
    PLOG(plog::info) << "======================================";
    PLOG(plog::info) << "";

    dynamicAppender.removeAppender(&startupAppender);
    startupAppender.setFileName(""); // set a new file name to close a file handle for the original file name
    dynamicAppender.addAppender(&normalAppender);

    PLOG(plog::info)<< "Normal mesage";

    return 0;
}

SergiusTheBest avatar May 13 '24 16:05 SergiusTheBest

Note startupAppender.setFileName(""); part.

The resulting log file is:


======================================
Start time: 
OS: 
Command: 
Version: 
======================================

2024-05-13 19:34:12.022 INFO  [45812] [main@38] Normal mesage

SergiusTheBest avatar May 13 '24 16:05 SergiusTheBest