Я представляю замену изначально написанной структуре ведения журнала моего приложения. Существующее ведение журнала записывается таким образом, чтобы генерировать файлы таким образом, что файл, в который записывается в данный момент, называется "logs.txt", а пролонгированные файлы называются < strong>"Logs.N.txt", где "Logs.1.txt" – последний после "logs.txt". Как добиться такого же поведения с помощью ведения журнала Boost V2?
Пытаюсь использовать ведение журнала Boost, потому что оно обеспечивает хорошую поддержку нескольких приемников, так как теперь мне нужно ориентировать свои журналы на 3 места: a) локальный файл журнала, b) драйвер стека в облаке и c) сервер системного журнала, размещенный в виде отдельного контейнера.
Причина, по которой я хочу, чтобы текущим файлом был "logs.txt", заключается в том, что, среди прочего, он позволяет просто tail -F logs.txt
выполнять система.
Я нашел фрагмент, который меняет журналы и сохраняет ограничения по размеру как для каждого файла, так и для общего количества журналов.
auto strm = boost::log::add_file_log(
boost::log::keywords::file_name = "Logs.%2N.txt",
boost::log::keywords::open_mode = std::ios_base::app,
boost::log::keywords::rotation_size = 5 * 1024, // Max filesize
boost::log::keywords::auto_flush = true
);
auto bkend = strm->locked_backend();
bkend->set_file_collector(boost::log::sinks::file::make_collector(
boost::log::keywords::target = "./", // log file destination
boost::log::keywords::max_size = 100 * 1024, //Max total size
boost::log::keywords::min_free_space = 100000
));
bkend->scan_for_files(boost::log::sinks::file::scan_method::scan_matching, true);
Поведение
Текущий шаблон генерации файлов:
Logs.01.txt <--- Oldest file
Logs.02.txt
.
.
.
Logs.19.txt
Logs.20.txt <--- File being written to
который по мере продолжения регистрации станет
Logs.41.txt <--- Oldest file
Logs.42.txt
.
.
.
Logs.59.txt
Logs.60.txt <--- File being written to
Индекс просто продолжает катиться (поэтому он выходит за рамки желаемого двухзначного индекса)
Logs.131.txt <--- Oldest file
Logs.132.txt
.
.
.
Logs.149.txt
Logs.150.txt <--- File being written to
Требуемый шаблон генерации файла:
logs.txt <--- File being written to
Logs.01.txt <--- Latest rolled over file
Logs.02.txt
.
.
.
Logs.12.txt
Logs.13.txt <--- Oldest file
растет до
logs.txt <--- File being written to
Logs.01.txt <--- Latest rolled over file
Logs.02.txt
.
.
.
Logs.19.txt
Logs.20.txt <--- Oldest file
и поскольку Logs.20.txt
находится на пределе общего пространства, он продолжает перезаписывать файл Logs.20.txt
файлом Logs.19.txt
и так далее для каждого ролловера.
Таким образом, самый старый файл продолжает переименовываться в следующий индекс, пока он не достигнет максимального предела общего пространства журнала, а затем просто перезаписывается.
Вопросы
- Существует ли конфигурация для серверной части ведения журнала файлов, которая может ее поддерживать?
- Если нет, как я могу настроить бэкэнд для этого?
- Кроме того, укажите мне любую документацию/руководство (кроме документации Boost.Log) по ведению журналов Boost, в котором рассказывается о структуре библиотеки и взаимодействиях на уровне классов, если известно.