c++ - 带有日志系统多类示例的 Appender

标签 c++ logging append log4cplus

我是使用日志系统的新手,但将其添加到您的程序中非常有用。

总结我的问题。我使用日志库 log4cplus

我用两个简单的类和主程序做了一个简单的例子。

这是我的错误日志:

  • log4cplus:ERROR 找不到记录器(主)的 append 程序。
  • log4cplus:ERROR 请正确初始化 log4cplus 系统。
  • 段错误:11

问题是我不知道如何用appender解决这个问题。

这是我的示例的基本代码。 Class1.h

#include <iostream>

#include <log4cplus/configurator.h>
#include <log4cplus/logger.h>

using namespace std;
// Use the log4cplus namespace
using namespace log4cplus;

class one
{
    private:
        // Create the logger
        Logger logger;

    public:
        bool flag;
        int valor;

        one();  
        int multiplica(int a);  
};

Class1.cpp

one::one()
{
    logger.getInstance(LOG4CPLUS_TEXT("Clase One - constructor.")); 
}

int one::multiplica(int a)
{
    int sol = 0;

    sol = valor * a;

    // Imprimo un mesaje en el log.
    LOG4CPLUS_INFO(logger, "El resultado de la multiplicación es: xx");

    return sol;
}

Class2.h

#include <iostream>

#include <log4cplus/configurator.h>
#include <log4cplus/logger.h>

using namespace std;
// Use the log4cplus namespace
using namespace log4cplus;

class two
{
    private:
        // Create the logger
        Logger logger;

    public:
        bool flag;
        int valor;

        two();
        int suma(int a);    
};

类.cpp

two::two()
{
    logger.getInstance(LOG4CPLUS_TEXT("Clase Two - DEconstructor.")); 
}

int two::suma(int a)
{
    int sol = 0;

    sol = valor + a;

    // Imprimo un mesaje en el log.
    LOG4CPLUS_INFO(logger, "El resultado de la suma es: YY ");

    return sol;
}

main.cpp

int main(int argc, char** argv)
{
    // Load the properties
    PropertyConfigurator::doConfigure("logClase.properties");
    Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("main"));

    // Log with INFO level
    if (logger.isEnabledFor(INFO_LOG_LEVEL))
    {
        LOG4CPLUS_INFO(logger, "Application startup");
    }

        one uno;
        two dos;

        uno.valor = dos.valor = 4;
        uno.multiplica(7);
        dos.suma(7);

    // Log with INFO level
    if (logger.isEnabledFor(INFO_LOG_LEVEL))
    {
        LOG4CPLUS_INFO(logger, "Application shutdown");
    }

    return 0;
}

我做错了什么??? 这是使用日志系统的正确方法??

我使用一个简单的属性文件将所有日志消息保存在一个文件中。

这是我用来配置 de logger 的 logClase.properties 文件。

log4cplus.rootLogger=INFO, STDOUT, FILEAPPENDER
log4cplus.logger.main=INFO
log4cplus.logger.utils=FILEAPPENDER

log4cplus.appender.STDOUT=log4cplus::ConsoleAppender
log4cplus.appender.STDOUT.layout=log4cplus::PatternLayout
log4cplus.appender.STDOUT.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S} [%t] %-5p %c{2} %%%x%% - %m [%l]%n

log4cplus.appender.FILEAPPENDER=log4cplus::RollingFileAppender
log4cplus.appender.FILEAPPENDER.File=KlasseEx.log
log4cplus.appender.FILEAPPENDER.MaxFileSize=5MB
#log4cplus.appender.FILEAPPENDER.MaxFileSize=500KB
log4cplus.appender.FILEAPPENDER.MaxBackupIndex=1
log4cplus.appender.FILEAPPENDER.layout=log4cplus::PatternLayout
log4cplus.appender.FILEAPPENDER.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S} [%t] %-5p %c{2} %%%x%% - %m [%l]%n

我想使用 FILEAPPENDER 和 Console appender 将消息放入文件和控制台。我认为这并不一定很难做到,一定很容易做到。

最佳答案

请参阅 log4cplus 文档中的 append 程序。你可能错过了这个记录器的一些初始化步骤——我的意思是你没有添加 append 程序。

参见 http://www.codeproject.com/Articles/15955/logging-made-easy-in-your-c-applications

之后:

Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("main"));

缺失:

SharedAppenderPtr consoleAppender(new ConsoleAppender());
consoleAppender->setName("myAppenderName");
consoleAppender->setLayout(new log4cplus::TTCCLayout());
logger.addAppender(consoleAppender);

关于c++ - 带有日志系统多类示例的 Appender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464866/

相关文章:

c++ - 什么是 C++ 中的接口(interface)与方法、抽象与封装

logging - Sinatra with Puma 在终端中提供两倍的输出

r - 在 Windows 上运行的 R/RStudio 中,我们可以让 message()、warning() 和 error() 在控制台中使用不同的颜色吗?

python递归追加到列表

python - 如果列表后的连续内存不足,Python如何处理列表扩展?

c++ - wxWidgets 与 append 到 wxChoice 列表相反

c++ - Windows 标准库中的定义不可访问

c++ - 在 QImage 上绘制 QPainterPath 的指定部分 [缩放和平移]

c++ - 尝试在旧机器上使用新的 libstdc++ 会导致错误

logging - 是否可以对fluentd收集的kubernetes pod日志进行分类?