• 贡献一个简单的日志类


    不多解释,用到了log4cpp和boost库。

    _GLIBCXX_BEGIN_NAMESPACE宏是c++标准库里的,用于声明namespace。我是从stl源码里拿过来用的。

     1 /*
     2  * File:   log.h
     3  * Author: raozf
     4  *
     5  * Created on 2012年7月19日, 上午11:33
     6  */
     7 
     8 #ifndef RZF_LOG_H
     9 #define RZF_LOG_H
    10 
    11 #include <boost/date_time/posix_time/posix_time.hpp>
    12 #include <log4cpp/FileAppender.hh>
    13 #include <log4cpp/Category.hh>
    14 #include <log4cpp/PropertyConfigurator.hh>
    15 
    16 _GLIBCXX_BEGIN_NAMESPACE(Log)
    17 class Log
    18 {
    19 public:
    20     inline static Log& instance()
    21     {
    22         static Log l;
    23         return l;
    24     }
    25 
    26     inline log4cpp::Category* getCategory()
    27     {
    28         return p;
    29     }
    30 
    31 private:
    32     Log()
    33     {
    34         log4cpp::PropertyConfigurator::configure(std::string("log.conf"));
    35         p = &log4cpp::Category::getRoot();
    36     }
    37 
    38     log4cpp::Category* p;
    39 };
    40 
    41 //to_simple_string
    42 #define NOW boost::posix_time::to_iso_extended_string(boost::posix_time::microsec_clock::local_time())
    43 #define LOG_DEBUG(msg) LOG4CPP_DEBUG_S((*Log::instance().getCategory()))<<"["<<NOW<<"][DEBUG]"<<msg;
    44 #define LOG_INFO(msg) LOG4CPP_INFO_S((*Log::instance().getCategory()))<<"["<<NOW<<"][INFO]"<<msg;
    45 #define LOG_WARN(msg) LOG4CPP_WARN_S((*Log::instance().getCategory()))<<"["<<NOW<<"][WARN]"<<msg;
    46 #define LOG_ERROR(msg) LOG4CPP_ERROR_S((*Log::instance().getCategory()))<<"["<<NOW<<"][ERROR]"<<msg;
    47 #define LOG_FATAL(msg) LOG4CPP_FATAL_S((*Log::instance().getCategory()))<<"["<<NOW<<"][FATAL]"<<msg;
    48 
    49 _GLIBCXX_END_NAMESPACE
    50 #endif    /* RZF_LOG_H */

    不足:

    (1)如果打印日志非常频繁,可能会有性能问题。

    (2)没有重复日志控制,如果在for,while之类的循环中打日志时,可能会打印大量重复日志。

  • 相关阅读:
    Elasticsearch布尔查询——bool
    Elasticsearch查询
    数据从文件导入Elasticsearch
    Elasticsearch批处理操作——bulk API
    Mysql笔记——DCL
    Mysql笔记——DML
    Mysql笔记——DDL
    Java笔记——面向接口编程(DAO模式)
    Java笔记——equals和==的区别
    JavaWeb笔记——注册登录系统项目思路
  • 原文地址:https://www.cnblogs.com/chutianyao/p/2605244.html
Copyright © 2020-2023  润新知