Пишите логи в разные папки - PullRequest
0 голосов
/ 05 июля 2019

Я хотел бы записывать журналы в CSV-файлы каждую минуту, эти CSV-файлы должны храниться в разных папках, т. Е. 60-минутные файлы журнала в папке первого часа и еще 60 минут, которые должны быть папкой следующего часа.

Когда я использую DailyRollingFileAppender, что приводит к исключению после завершения определенного часа, пока не произойдет исключение, файлы создаются как обычно. Если я начинаю запись в 12:14 и работает нормально до 12:59, и возникает исключение.

#include <unistd.h>
#include <log4cxx/logger.h>
#include <log4cxx/propertyconfigurator.h>

using namespace log4cxx;
using namespace log4cxx::helpers;

// Define static logger variable
LoggerPtr loggerMyMain(Logger::getLogger(""));
LoggerPtr loggerFunctionA(Logger::getLogger(""));

void functionA() {
    LOG4CXX_INFO(loggerFunctionA, "Executing functionA.");
    usleep(2000);
}

int main() {
    int value = 5;

    // Load properties style configuration file using PropertyConfigurator
    PropertyConfigurator::configure("log4j.properties");
    for(int j = 1; j < 10000; j++) {
        LOG4CXX_TRACE(
            loggerMyMain,
            "this is a debug message for detailed code discovery. Value=" << j);
        LOG4CXX_DEBUG(loggerMyMain, "this is a debug message.");
        LOG4CXX_INFO(loggerMyMain, "this is a info message, ignore. Value=" << j);
        LOG4CXX_WARN(loggerMyMain, "this is a warn message, not too bad.");
        LOG4CXX_ERROR(loggerMyMain,
                      "this is a error message, something serious is happening.");
        LOG4CXX_FATAL(loggerMyMain, "this is a fatal message!!!");

        functionA();
        if(j > 9998) j = 1;
    }
    return 0;
}

Файл конфигурации log4j.properties:

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender

# Set the name of the file
#log4j.appender.FILE.File=${'folder'/}

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=false

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug

# Set the append to false, should not overwrite
log4j.appender.FILE.Append=false

# Set the DatePattern
log4j.appender.FILE.DatePattern=yyyy-MM/yyyy-MM-dd/yyyy-MM-dd-HH/yyyy-MM-dd_HH:mm'.''csv'

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

вывод:

 g++ file.cpp  -lapr-1 -laprutil-1 -llog4cxx -o kk
 kk@deb:~/logs/logcfg$ ./kk
 log4cxx: Exception during rollover

ожидаемая структура выпуска

   day01-|
         |----hour1 |----min1.csv
         |          |----min2.csv
         |          |----min60.csv
         |----hour-N
                |----min1.csv
                |----min60.csv
...