log4cxx:使用log4j.rootLogger以外的命名记录器

log4cxx: using a named logger other than log4j.rootLogger

本文关键字:记录器 使用 log4j rootLogger log4cxx      更新时间:2023-10-16

我有一个基于属性的log4cxx,名为Log4cxxConfig.cfg。在其中,我添加了一个名为log4j.daemon的命名记录器。我还创建了一个称为QTermDaemonAppender的appender。以下是cfg文件的一部分:

log4j.rootLogger=info, rootFileAppender
log4j.StationControllertest=trace, rootConsoleAppender, rootFileAppender
log4j.log4test=trace, rootConsoleAppender
log4j.daemon=trace, QTermDaemonAppender
# QTermDaemonAppender
log4j.appender.QTermDaemonAppender.File=qterm_daemon.log
log4j.appender.QTermDaemonAppender.Append=true            # set whether to overwrite or append to the file
log4j.appender.QTermDaemonAppender.MaxFileSize=10000KB
log4j.appender.QTermDaemonAppender.MaxBackupIndex=10
log4j.appender.QTermDaemonAppender=org.apache.log4j.RollingFileAppender
log4j.appender.QTermDaemonAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.QTermDaemonAppender.layout.ConversionPattern=%5p %d [%t] (%F:%L) - %m%n

在我的C++代码中,我已经尝试了我能想到的一切,以使我的输出写入qterm_daemon.log。除了没有写入任何内容外,该文件没有创建。

LoggerPtr logger(Logger::getLogger("daemon"));
int main(int argc, char* argv[]) 
{
    // Initialise logger. Use the configuration file named 'log4cxx.properties'.
    PropertyConfigurator::configureAndWatch("Log4cxxConfig.cfg");

我已经试过了。我已尝试将cfg文件的名称限定为"./Log4cxxConfig.cfg"。我已在路径中搜索该文件的重复项。我已经尝试使用记录器名称"log4j.daemon"而不是"daemon"。

我试过以下几种:

int main(int argc, char* argv[])
{
    // Initialise logger. Use the configuration file named 'log4cxx.properties'.
    PropertyConfigurator::configureAndWatch("Log4cxxConfig.cfg");
    LoggerPtr logger(Logger::getLogger("log4j.daemon"));

同样,通过限定路径和更改记录器名称的各种组合。没有快乐!我到底做错了什么?我可以像冠军一样在AS400上使用Java和log4j1.4。顺便说一句,这是Raspbian和新的Pi 2。

好的,我已经完成了这个设置。

代码:

LoggerPtr logger(Logger::getLogger("daemon"));
int main(int argc, char* argv[])
{
    // Initialise logger. Use the configuration file named 'Log4cxxConfig.cfg'.
    PropertyConfigurator::configureAndWatch("Log4cxxConfig.cfg");

和配置文件:

log4j.logger.daemon=trace, QTermDaemonAppender
# QTermDaemonAppender
log4j.appender.QTermDaemonAppender.File=qterm_daemon3.log
log4j.appender.QTermDaemonAppender.Append=true            # set whether to overwrite or append to the file
log4j.appender.QTermDaemonAppender.MaxFileSize=10000KB
log4j.appender.QTermDaemonAppender.MaxBackupIndex=10
log4j.appender.QTermDaemonAppender=org.apache.log4j.RollingFileAppender
log4j.appender.QTermDaemonAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.QTermDaemonAppender.layout.ConversionPattern=%5p %d [%t] (%F:%L) - %m%n

关键是获取正确的记录器名称并在代码中正确指定它。我确信有一些命名空间的事情正在进行,因为你必须将".logger"部分添加到你的记录器名称中。我会试着研究一下这是否属实。使用像"logger.daemon"或"log4j.logger.deamon"这样的字符串是不起作用的。

在任何情况下,我的日志文件qterm_daemon3.log都会被创建并写入输出。显然,"log4j"是正确的前缀,即使对于log4cxx也是如此。我在网上发现了一个使用"log4cplus"的例子,它只是导致了一个"请正确初始化log4cxx系统"。