最近在写 Linux 程序的时候,碰到这样的问题:Log4Cxx 0.10.0 在 Linux 下退出程序时导致程序中断,即提示出现 segmentation fault 错误。

如果你用 gdb 调试,会提示如下信息:

Program received signal SIGSEGV, Segmentation fault.
0x02fa68f3 in apr_vformatter () from /usr/lib/libapr-1.so.0

原因是因为 Log4Cxx 在退出时有非法的资源释放。

有一个解决办法:可以在程序退出时,显示地关闭 Log4Cxx 对象。

I have the same problem if I use log4cxx.AsyncAppender.
I fixed the problem by calling log4cxx::LogManager::shutdown(); before the end of the process.
It's not very clean but it works.

在程序退出时使用语句

log4cxx::LogManager::shutdown();

来清理 log4cxx,而不是让它自己来清理。

注意: 需要在程序所有可能退出的地方,设置这一语句 ,否则依然会有 segmentation fault 的问题。