You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

log4cplus ConsoleAppender在容器环境中失效问题求助

log4cplus容器化后长循环场景下无日志输出问题

宿主机运行程序时日志输出正常,但容器中运行带无限循环的程序时,log4cplus完全没有日志输出。怀疑是缓冲区未及时刷新导致的:

  • 移除无限循环后,程序终止前日志能正常输出,说明log4cplus会在程序结束时做最后一次缓冲区刷新
  • 延长sleep时长无法解决问题,但取消注释代码里的std::cout输出语句后,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; // 取消注释后日志恢复正常
        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%n

Dockerfile

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
)

内容的提问来源于stack exchange,提问作者TenderShortGoldenRetriever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:39:41