SergiusTheBest / plog

Portable, simple and extensible C++ logging library
MIT License
2.19k stars 385 forks source link

Can't add ConsoleAppender in a if statement #272

Closed biboc closed 11 months ago

biboc commented 11 months ago

Why Starting program is not printed with this code:

int main(int argc, char* argv[]) {
    plog::init(plog::debug, "/tmp/log/program", 200000, 5);

    if (1) {
        plog::ConsoleAppender<plog::TxtFormatter> consoleAppender;  // Add standard output logging on console
        plog::get()->addAppender(&consoleAppender);
    }
    PLOG_DEBUG << "Starting program";
    return 0;
}

and printed with this code:

int main(int argc, char* argv[]) {
    plog::init(plog::debug, "/tmp/log/program", 200000, 5);

    plog::ConsoleAppender<plog::TxtFormatter> consoleAppender;  // Add standard output logging on console
    plog::get()->addAppender(&consoleAppender);

    PLOG_DEBUG << "Starting program";
    return 0;
}

Basically, I want to enable it only if I have -v arg in my program so I need to add consoleAppender in the if statement

SergiusTheBest commented 11 months ago

In your code consoleAppender lives only in the if statement. Change it to:

if (1) {
    static plog::ConsoleAppender<plog::TxtFormatter> consoleAppender;  // Add standard output logging on console
    plog::get()->addAppender(&consoleAppender);
}

or to:

plog::ConsoleAppender<plog::TxtFormatter> consoleAppender;  // Add standard output logging on console
if (1) {
    plog::get()->addAppender(&consoleAppender);
}
biboc commented 11 months ago

of course :open_mouth: