我用apache的log4cxx库来写日志,但是很不稳定不知道为什么,经常只生成了日志文件,但是什么日志都写不出来,今天又出现三个异常:
testlog.exe 中的 0x77e8bc81 处最可能的异常: 0x80004002: 不支持此接口 。
testlog.exe 中的 0x77e8bc81 处最可能的异常: 0x80004002: 不支持此接口 。
testlog.exe 中的 0x77e8bc81 处最可能的异常: Microsoft C++ exception: log4cxx::helpers::ClassNotFoundException @ 0x0012e444 。
程序不崩溃,但是生成的log4j的日志文件是空,一句都没写进去,诡异死了。配置文件也没错啊。
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="NULL" class="org.apache.log4j.performance.NullAppender">
<layout class="org.apache.log4j.SimpleLayout"/>
</appender> <appender name="log" class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler" />
<param name="File" value="log/test3.log" />
<param name="Append" value="false" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<param name="MaxFileSize" value="1024KB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %%%c-%p[%t] %m%n" />
</layout>
</appender>
<category name="MC" additivity="true">
<priority value="DEBUG"/>
</category>
<root>
<priority value="DEBUG" />
<appender-ref ref="log" />
</root>
</log4j:configuration>
调用
log4cxx::xml::DOMConfigurator::configure(cfgFile.c_str());
...
LoggerPtr logger = Logger::getLogger("MC");
...
LOG4CXX_DEBUG(logger, log.c_str());
testlog.exe 中的 0x77e8bc81 处最可能的异常: 0x80004002: 不支持此接口 。
testlog.exe 中的 0x77e8bc81 处最可能的异常: 0x80004002: 不支持此接口 。
testlog.exe 中的 0x77e8bc81 处最可能的异常: Microsoft C++ exception: log4cxx::helpers::ClassNotFoundException @ 0x0012e444 。
程序不崩溃,但是生成的log4j的日志文件是空,一句都没写进去,诡异死了。配置文件也没错啊。
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="NULL" class="org.apache.log4j.performance.NullAppender">
<layout class="org.apache.log4j.SimpleLayout"/>
</appender> <appender name="log" class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler" />
<param name="File" value="log/test3.log" />
<param name="Append" value="false" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<param name="MaxFileSize" value="1024KB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %%%c-%p[%t] %m%n" />
</layout>
</appender>
<category name="MC" additivity="true">
<priority value="DEBUG"/>
</category>
<root>
<priority value="DEBUG" />
<appender-ref ref="log" />
</root>
</log4j:configuration>
调用
log4cxx::xml::DOMConfigurator::configure(cfgFile.c_str());
...
LoggerPtr logger = Logger::getLogger("MC");
...
LOG4CXX_DEBUG(logger, log.c_str());
在fileappender.cpp的
void FileAppender::setFile(const String& fileName, bool append,
bool bufferedIO, int bufferSize)函数中 ofs.open(T2A(fileName.c_str()), (append ? std::ios::app :
std::ios::trunc)|std::ios::out);
ofs.imbue( std::locale("chs") ); //使能输出中文;