【问题标题】:log4cxx: using a named logger other than log4j.rootLoggerlog4cxx:使用除 log4j.rootLogger 之外的命名记录器
【发布时间】:2015-06-01 05:02:48
【问题描述】:

我有一个名为 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”而不是“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。

【问题讨论】:

    标签: c++ logging log4cxx


    【解决方案1】:

    好的,我得到了这个设置。

    代码:

    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 系统”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多