当前位置:  编程技术>c/c++/嵌入式

C++日志记录类实例解析

    来源: 互联网  发布时间:2014-10-26

    本文导语:  本文所述实例是从一个Red Hat开源项目里面扒出来的,非常实用!读者还可以根据自身需求加以修改!完整源码如下: Log.h文件部分: #ifndef __LOG_H__ #define __LOG_H__ #include #include #include #include #include #include class CLog ...

本文所述实例是从一个Red Hat开源项目里面扒出来的,非常实用!读者还可以根据自身需求加以修改!完整源码如下:

Log.h文件部分:

#ifndef __LOG_H__
#define __LOG_H__

#include 
#include 
#include 
#include 
#include 
#include 

class CLog {
public:
  ~CLog();
  static CLog* get(TCHAR* path = NULL);
  void printf(const char* format, ...);

private:
  CLog(FILE* handle);

private:
  static CLog* _log;
  FILE* _handle;
};

enum {
 LOG_DEBUG,
 LOG_INFO,
 LOG_WARN,
 LOG_ERROR,
 LOG_FATAL
};

#ifdef _DEBUG
static unsigned int log_level = LOG_DEBUG;
#else
static unsigned int log_level = LOG_INFO;
#endif

#define PRINT_LINE(type, format, datetime, ms, ...)           
  printf("%lu::%s::%s,%.3d::%s::" format "n", GetCurrentThreadId(), type, datetime, ms, 
      __FUNCTION__, ## __VA_ARGS__);

#define LOG(type, format, ...) do {                   
  if (type >= log_level && type PRINT_LINE(type_as_char[type], format, datetime_str, now.millitm, ## __VA_ARGS__); 
    } else {                            
      PRINT_LINE(type_as_char[type], format, datetime_str, now.millitm, ## __VA_ARGS__); 
    }                                
  }                                  
} while(0)


#define log_printf(format, ...) LOG(LOG_INFO, format, ## __VA_ARGS__)
#define LOG_INFO(format, ...) LOG(LOG_INFO, format, ## __VA_ARGS__)
#define LOG_WARN(format, ...) LOG(LOG_WARN, format, ## __VA_ARGS__)
#define LOG_ERROR(format, ...) LOG(LOG_ERROR, format, ## __VA_ARGS__)

#define DBGLEVEL 1000

#define DBG(level, format, ...) do {      
  if (level  LOG_ROLL_SIZE) {
    TCHAR roll_path[MAX_PATH];
    sprintf(roll_path, "%s.1", path);
    if (!MoveFileEx(path, roll_path, MOVEFILE_REPLACE_EXISTING)) {
      return NULL;
    }
  }
  FILE* handle = fopen(path, "a+");
  if (!handle) {
    return NULL;
  }
  _log = new CLog(handle);
  return _log;
}

void CLog::printf(const char* format, ...)
{
  va_list args;

  va_start(args, format);
  vfprintf(_handle, format, args);
  va_end(args);
  fflush(_handle);
}

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 解析mysql二进制日志处理事务与非事务性语句的区别
  • Nginx 访问日志实时解析 ngxtop
  • [MySQL binlog]mysql如何彻底解析Mixed日志格式的binlog
  • 帮忙解析下这段日志,awk或者sed。
  • SqlServer中tempdb的日志机制原理解析及示例分享
  • sendmail只发不收,设置好hosts中的自己和对方mta的主机IP对应但是日志中解析不出来对方域名
  • python异常信息堆栈输出到日志文件
  • sql server日志收缩脚本及解决日志增长过快的问题 iis7站长之家
  • 不同版本MSSQL清除日志方法介绍
  • solaris的系统日志文件叫什么名字?在什么目录下??如何打开/关闭系统日志????
  • Docker支持更深入的容器日志分析
  • 如何关闭red hat 7.3的核心日志和系统日志
  • ubuntu查看系统日志及相关文件介绍
  • 请问程序的日志重定向到别日志文件,系统会对该日志文件的大小作限制么
  • docker源码分析之容器日志处理与log-driver实现
  • 用shell如何获取一个日志中某个时间段的日志
  • c#实现把异常写入日志示例(异常日志)
  • sql server日志收缩脚本及解决日志增长过快的问题
  • 我通过C程序执行tail -f printlog(printlog为日志名),想要动态获取里面新进来的日志,怎么办?
  • 多进程输出日志,用什么方式保存日志效率比较高?
  • oracle 11g的警告日志和监听日志的删除方法
  • apache使用日志分割模块rotatelogs分割日志详解
  • mysql日志文件在哪 如何修改MySQL日志文件位置
  • 删除sqlserver数据库日志和没有日志的数据库恢复办法
  • (答者给分)crontab 定时执行sh 日志显示发送mail 如何查看错误日志
  • java自定义日志输出文件(log4j日志文件输出多个自定义日志文件)
  • 日志分析软件 Splunk


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3