我正在尝试将我的应用程序封装起来,但我在log4cplus的工作上遇到了困难。在前面的底线上,日志在主机上运行时可以工作,但是当我从长时间运行的循环中记录时,在容器中则不能工作。在某个地方,它似乎是一个没有被冲走的缓冲。下面是一个最小的例子。
另外,删除长寿循环可以消除这个问题,大概是log4cplus在删除之前最后刷新一次。延长睡眠时间似乎没有帮助。
main.cpp
#include <iostream>
#include <unistd.h>
#include <log4cplus/logger.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/configurator.h>
#include <log4cplus/initializer.h>
int main(int argc, char **argv)
{
std::cout << "Sanity Check" << std::endl;
auto log4cplus = ::log4cplus::Initializer();
std::string logconfig("log4cplus_configure.ini");
::log4cplus::PropertyConfigurator::doConfigure(logconfig);
auto logger = ::log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("main"));
while (true) {
LOG4CPLUS_ERROR(logger, "Sleeping...");
// std::cout << "cout sleep..." << std::endl; // uncomment to get log messages working
sleep(1);
}
return 0;
}log4cplus_configure.ini
log4cplus.rootLogger=INFO, MyConsoleAppender
log4cplus.appender.MyConsoleAppender=log4cplus::ConsoleAppender
log4cplus.appender.MyConsoleAppender.layout=log4cplus::PatternLayout
log4cplus.appender.MyConsoleAppender.layout.ConversionPattern=[%-5p][%d] %m%nDockerfile
FROM rockylinux:latest
RUN dnf install -y boost-system
COPY ./build/sandbox /
COPY ./log4cplus_configure.ini /
CMD ["/sandbox"]CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
set (CMAKE_CXX_STANDARD 17)
# Project executable and library
add_executable(sandbox main.cpp)
target_link_libraries(sandbox
PUBLIC liblog4cplus.a
PUBLIC pthread
PUBLIC boost_system
)发布于 2022-08-31 20:20:20
不知道为什么,但是将log4cplus.appender.MyConsoleAppender.ImmediateFlush=true添加到log4cplus_configure.ini解决了我的问题。
https://stackoverflow.com/questions/73561144
复制相似问题