読者です 読者をやめる 読者になる 読者になる

log4cppでログを取る

「メモなんかいいからログ取れよ!!!」と先輩社員に怒られました(ウソです)
ログのおかげで彼女ができました(ウソです)
きちんとログを取ることでデバッグがやりやすくなりました(当然です)

C++PostgreSQLに接続するサンプルに、ログを吐かせる。ただそれだけ。

foobarmain.cpp

#include <iostream>
#include <unistd.h>
#include "foobar.h"

int main() {
    FooBar *foobar= new FooBar();

    bool logConf = foobar->InitLog4cpp();
    if ( !logConf ) {
        return -1;
    }

    foobar->ProcessMain();

    if ( foobar != NULL ){
        delete foobar;
        foo = NULL;
    }
}

fobar.h

#ifndef FOOBAR_H_
#define FOOBAR_H_

#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string>
#include <cstdlib>
#include <fstream>
#include <sstream>
#include "libpq-fe.h"

#include <log4cpp/Category.hh>
#include <log4cpp/PropertyConfigurator.hh>

#define LOGCONF "/home/tydk27/foobar/conf/foobar_log.conf"

class FooBar {
public:
    FooBar();
    bool ProcessMain();
    bool InitLog4cpp();

private:
    std::string DbHost;
    int DbPort;
    std::string DbName;
    std::string DbUser;
    std::string DbPass;

};

#endif /* FOOBAR_H_ */

fobar.cpp

#include "foobar.h"

using namespace std;

FooBar::FooBar() {
    DbHost = "localhost";
    DbPort = 5432;
    DbName = "sample";
    DbUser = "hoge";
    DbPass = "hogehoge";
}

bool FooBar::ProcessMain() {
    log4cpp::Category& logger = log4cpp::Category::getInstance("ProcessMain");
    logger.info("Process Start");

    try {
        string connstr = "host=" + DbHost + " port=" + DbPort + " dbname=" + DbName + " user=" + DbUser + " password=" + DbPass;

        PGconn* conn;
        conn = PQconnectdb( connstr.c_str() );

        if ( PQstatus( conn ) != CONNECTION_OK ) {
            logger.error("Connection Failed");
            exit( EXIT_FAILURE );
        }
    } catch ( exception& e ) {
        logger.fatal("Fatal Error");
        return false;
    }

    logger.info("Process End");
    return true;
}

foobar_log.conf

log4cpp.rootCategory=DEBUG, rootAppender
log4cpp.appender.rootAppender=RollingFileAppender
log4cpp.appender.rootAppender.fileName=/home/tydk27/foobar/log/foobar.log
log4cpp.appender.rootAppender.maxFileSize=1024KB
log4cpp.appender.rootAppender.maxBackupIndex=5
log4cpp.appender.rootAppender.layout=PatternLayout
log4cpp.appender.rootAppender.layout.ConversionPattern=%d [%t] %-6p %c - %m%n