1

私はロギング システムを使用する初心者ですが、プログラムに追加すると非常に便利です。

私の問題を要約します。ロギング ライブラリlog4cplusを使用します

2 つの単純なクラスとメイン プログラムを使用した簡単な例を示します。

それは私のエラーログです:

  • log4cplus:ERROR ロガー (メイン) のアペンダーが見つかりませんでした。
  • log4cplus:ERROR log4cplus システムを正しく初期化してください。
  • セグメンテーション違反: 11

問題は、アペンダーで問題を解決する方法がわからないことです。

それが私の例の基本的なコードです。 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);    
};

Class.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;
}

私が間違っていることは何ですか?それがロギングシステムを操作する正しい方法です??

単純なプロパティ ファイルを使用して、すべてのログ メッセージをファイルに保存します。

これは、ロガーを構成するための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 アペンダーを使用して、ファイルとコンソールにメッセージをスローしたいと考えています。それは難しいことではなく、簡単にできることだと思います。

4

2 に答える 2

2

log4cplus ドキュメントのアペンダーについては、を参照してください。おそらく、このロガーの初期化のいくつかのステップが欠落しています。つまり、アペンダーを追加していないということです。

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);
于 2012-09-17T18:46:33.580 に答える