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

时间:2015-03-27 18:41:03

标签: c++ logging log4cxx

我有一个名为Log4cxxConfig.cfg的基于属性的log4cxx。在其中我添加了一个名为log4j.daemon的命名记录器。我还创建了一个名为QTermDaemonAppender的追加器。以下是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”而不是“守护进程”。

我尝试了以下内容:

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。

1 个答案:

答案 0 :(得分:0)

好的,我让这个设置正常工作。

代码:

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.daemon"没有工作。

无论如何,我的日志文件qterm_daemon3.log被创建并输出写入它。显然" log4j"是即使对于log4cxx也使用的正确前缀。我在网上找到了一个使用" log4cplus"这只是引起了一个"请正确初始化log4cxx系统"。