改进后的日志类CLogger

在原有的基础上增加了module_name,表示模块名,当一个系统由多模块组成时,输出的日志将更加清晰,使用方法,以MOOON-agent中的为例:

/** 不要修改下面的常量值,而应当通过对应的方法去修改  * 这些常量值主要是方便多模块共享,故放在这个公有头文件当中  */enum{    LOG_LINE_SIZE_MIN              = 256,        /** 日志行最小长度 */    LOG_LINE_SIZE_MAX              = 32768,      /** 日志行最大长度(32K) ,最大不能超过64K,因为使用2字节无符号整数存储的 */    DEFAULT_LOG_FILE_SIZE          = 104857600,  /** 默认的单个日志文件大小(100MB) */    DEFAULT_LOG_FILE_BACKUP_NUMBER = 10          /** 默认的日志文件备份个数 */};

/** 定义日志级别 */typedef enum{    LOG_LEVEL_DETAIL = 0,    LOG_LEVEL_DEBUG  = 1,    LOG_LEVEL_INFO   = 2,    LOG_LEVEL_WARN   = 3,    LOG_LEVEL_ERROR  = 4,    LOG_LEVEL_FATAL  = 5,    LOG_LEVEL_STATE  = 6,  /** 仅输出状态数据 */    LOG_LEVEL_TRACE  = 7}log_level_t;

/** 通过日志级别名得到日志级别 */extern log_level_t get_log_level(const char* level_name);/** 通过日志级别得到日志级别名,如果传入错误的日志级别,则返回NULL */extern const char* get_log_level_name(log_level_t log_level);

/**  * 日志器接口,提供常见的写日志功能  */class ILogger{public:    /** 空虚拟析构函数,以屏蔽编译器告警 */    virtual ~ILogger() {}

/** 是否允许同时在标准输出上打印日志 */    virtual void enable_screen(bool enabled) {}    /** 是否允许二进制日志,二进制日志必须通过它来打开 */    virtual void enable_bin_log(bool enabled) {}    /** 是否允许跟踪日志,跟踪日志必须通过它来打开 */    virtual void enable_trace_log(bool enabled) {}    /** 是否自动在一行后添加结尾的点号,如果最后已经有点号或换符符,则不会再添加 */    virtual void enable_auto_adddot(bool enabled) {}    /** 是否自动添加换行符,如果已经有换行符,则不会再自动添加换行符 */    virtual void enable_auto_newline(bool enabled) {}    /** 设置日志级别,跟踪日志级别不能通过它来设置 */    virtual void set_log_level(log_level_t log_level) {}    /** 设置单个文件的最大建议大小 */    virtual void set_single_filesize(uint32_t filesize) {}    /** 设置日志文件备份个数,不包正在写的日志文件 */    virtual void set_backup_number(uint16_t backup_number) {}

/** 是否允许二进制日志 */    virtual bool enabled_bin() { return false; }    /** 是否允许Detail级别日志 */    virtual bool enabled_detail() { return false; }    /** 是否允许Debug级别日志 */    virtual bool enabled_debug() { return false; }    /** 是否允许Info级别日志 */    virtual bool enabled_info() { return false; }    /** 是否允许Warn级别日志 */    virtual bool enabled_warn() { return false; }    /** 是否允许Error级别日志 */    virtual bool enabled_error() { return false; }    /** 是否允许Fatal级别日志 */    virtual bool enabled_fatal() { return false; }    /** 是否允许输出状态日志 */    virtual bool enabled_state() { return false; }    /** 是否允许Trace级别日志 */    virtual bool enabled_trace() { return false; }

virtual void log_detail(const char* filename, int lineno, const char* module_name, const char* format, ...) {}    virtual void log_debug(const char* filename, int lineno, const char* module_name, const char* format, ...)  {}    virtual void log_info(const char* filename, int lineno, const char* module_name, const char* format, ...)   {}    virtual void log_warn(const char* filename, int lineno, const char* module_name, const char* format, ...)   {}    virtual void log_error(const char* filename, int lineno, const char* module_name, const char* format, ...)  {}    virtual void log_fatal(const char* filename, int lineno, const char* module_name, const char* format, ...)  {}    virtual void log_state(const char* filename, int lineno, const char* module_name, const char* format, ...)  {}    virtual void log_trace(const char* filename, int lineno, const char* module_name, const char* format, ...)  {}

/** 写二进制日志 */    virtual void bin_log(const char* filename, int lineno, const char* module_name, const char* log, uint16_t size) {}};

//////////////////////////////////////////////////////////////////////////// 日志宏,方便记录日志extern ILogger* g_logger; // 只是声明,不是定义,不能赋值哦!

#define __MYLOG_DETAIL(logger, module_name, format, ...) \do { \    if (NULL == logger) { \        printf("[DETAIL][%s:%d]", __FILE__, __LINE__); \        printf(format, ##__VA_ARGS__); \    } \    else if (logger->enabled_detail()) { \        logger->log_detail(__FILE__, __LINE__, module_name, format, ##__VA_ARGS__); \    } \} while(false)

#define __MYLOG_DEBUG(logger, module_name, format, ...) \do { \    if (NULL == logger) { \        printf(PRINT_COLOR_DARY_GRAY"[DEBUG][%s:%d]"PRINT_COLOR_NONE, __FILE__, __LINE__); \        printf(format, ##__VA_ARGS__); \    } \    else if (logger->enabled_debug()) { \        logger->log_debug(__FILE__, __LINE__, module_name, format, ##__VA_ARGS__); \    } \} while(false)

#define __MYLOG_INFO(logger, module_name, format, ...) \do { \    if (NULL == logger) { \        printf("[INFO][%s:%d]", __FILE__, __LINE__); \        printf(format, ##__VA_ARGS__); \    } \    else if (logger->enabled_info()) { \        logger->log_info(__FILE__, __LINE__, module_name, format, ##__VA_ARGS__); \    } \} while(false)

#define __MYLOG_WARN(logger, module_name, format, ...) \do { \    if (NULL == logger) { \        printf(PRINT_COLOR_YELLOW"[WARN][%s:%d]"PRINT_COLOR_NONE, __FILE__, __LINE__); \        printf(format, ##__VA_ARGS__); \    } \    else if (logger->enabled_warn()) { \        logger->log_warn(__FILE__, __LINE__, module_name, format, ##__VA_ARGS__); \    } \} while(false)

#define __MYLOG_ERROR(logger, module_name, format, ...) \do { \    if (NULL == logger) { \        printf(PRINT_COLOR_RED"[ERROR][%s:%d]"PRINT_COLOR_NONE, __FILE__, __LINE__); \        printf(format, ##__VA_ARGS__); \    } \    else if (logger->enabled_error()) { \        logger->log_error(__FILE__, __LINE__, module_name, format, ##__VA_ARGS__); \    } \} while(false)

#define __MYLOG_FATAL(logger, module_name, format, ...) \do { \    if (NULL == logger) { \        printf(PRINT_COLOR_BROWN"[FATAL][%s:%d]"PRINT_COLOR_NONE, __FILE__, __LINE__); \        printf(format, ##__VA_ARGS__); \    } \    else if (logger->enabled_fatal()) { \        logger->log_fatal(__FILE__, __LINE__, module_name, format, ##__VA_ARGS__); \    } \} while(false)

#define __MYLOG_STATE(logger, module_name, format, ...) \do { \    if (NULL == logger) { \        printf("[STATE][%s:%d]", __FILE__, __LINE__); \        printf(format, ##__VA_ARGS__); \    } \    else if (logger->enabled_state()) { \        logger->log_state(__FILE__, __LINE__, module_name, format, ##__VA_ARGS__); \    } \} while(false)

#define __MYLOG_TRACE(logger, module_name, format, ...) \do { \    if (NULL == logger) { \        printf("[TRACE][%s:%d]", __FILE__, __LINE__); \        printf(format, ##__VA_ARGS__); \    } \    else if (logger->enabled_trace()) { \        logger->log_trace(__FILE__, __LINE__, module_name, format, ##__VA_ARGS__); \    } \} while(false)

#define __MYLOG_BIN(logger, module_name, log, size) \do { \    if ((logger != NULL) && logger->enabled_bin()) \        logger->bin_log(__FILE__, __LINE__, module_name, log, size); \} while(false)

#define MYLOG_BIN(log, size)         __MYLOG_BIN(sys::g_logger, log, size)#define MYLOG_TRACE(format, ...)     __MYLOG_TRACE(sys::g_logger, NULL, format, ##__VA_ARGS__)#define MYLOG_STATE(format, ...)     __MYLOG_STATE(sys::g_logger, NULL, format, ##__VA_ARGS__)#define MYLOG_FATAL(format, ...)     __MYLOG_FATAL(sys::g_logger, NULL, format, ##__VA_ARGS__)#define MYLOG_ERROR(format, ...)     __MYLOG_ERROR(sys::g_logger, NULL, format, ##__VA_ARGS__)#define MYLOG_WARN(format, ...)      __MYLOG_WARN(sys::g_logger, NULL, format, ##__VA_ARGS__)#define MYLOG_INFO(format, ...)      __MYLOG_INFO(sys::g_logger, NULL, format, ##__VA_ARGS__)#define MYLOG_DEBUG(format, ...)     __MYLOG_DEBUG(sys::g_logger, NULL, format, ##__VA_ARGS__)#define MYLOG_DETAIL(format, ...)    __MYLOG_DETAIL(sys::g_logger, NULL, format, ##__VA_ARGS__)

本文出自 “飞月” 博客,请务必保留此出处http://mooon.blog.51cto.com/1246491/941082

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索日志
, fatal error c1902
, const
, char
, virtual
, format
, __FILE__
, va_arg
, __name__
Logger
c 日志类、php 日志类、日志类型、log4j指定类日志输出、qt日志类,以便于您获取更多的相关知识。

时间: 2024-10-04 17:45:29

改进后的日志类CLogger的相关文章

来自mooon的最简单的日志类CSimpleLogger

/** * 单个头文件,可即时独立使用,只要定义了宏NOT_WITH_MOOON,即不依赖于mooon * 简单的写日志类,非线程安全,提供按大小滚动功能 * 不追求功能,也不追求性能,只求简单,若要功能强.性能高,可以使用CLogger * * 使用方法: * 1) 构造一个CSimpleLogger对象 * CSimpleLogger logger(".", "test.log", 1024*1024, 10); * 2) 调用print方法写日志 * logg

【等待事件】等待事件系列(3+4)--System IO(控制文件)+日志类等待

 [等待事件]等待事件系列(3+4)--System IO(控制文件)+日志类等待   1  BLOG文档结构图     2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 控制文件类等待 ② 日志类等待   2.2  相关参考文章链接 [推荐] 等待事件系列(1)--User I/O类型(下) http://blog.itpub.net/26736162/viewspace-2124435

日志类 LogUtil

本文转载:http://www.cnblogs.com/HopeGi/archive/2012/12/31/2840812.html   using System; using System.IO;  namespace Common {     /// <summary>     /// 日志类     /// </summary>     public static class LogUtil     {         /// <summary>         

C# 日志类

本文代码来自:http://www.oschina.net/code/snippet_1181744_27513 作者:ebola 该类的作用:简单日志类,队列实现.可按天 周 月 年 大小分割文件. 代码如下: using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Text; using System

ASP日志类和判断是否包涵JS脚本类

ASP日志类  代码如下 复制代码 Function WriteLogReg(Error_lerong)     On Error Resume Next     LogFileTmp = "Error.log"     Set tmpFsoR = Server.CreateObject("scripting.filesystemobject")     Set tmpLogR = tmpFsoR.OpentextFile(Server.MapPath(LogFil

liferay build service 后,Util类里自动生成的中文注释为乱码怎么解决?

问题描述 liferay build service 后,Util类里自动生成的中文注释为乱码怎么解决? 我在自己的 xxxLocalServiceImpl 类里边定义方法时添加了一些中文注释, 然后 build services, 在 xxxLocalServiceUtil类里边自动生成的方法的注释中文部分是乱码, 我的eclipse设置的是UTF-8格式,请问大神,这该怎么解决?

C# 简易异步日志类 [ C# | Log | TextWriterTraceListener ]

前言 即使是小型项目,也需要日志的功能,这里就不讨论Log4Net之类的框架,提供一个异步的.控制台输出+日志文件输出的简易日志帮助类.   正文 一.帮助类文件Logger.cs //=========================================//// 作 者:农民伯伯// 邮 箱:over140@gmail.com// 博 客:http://over140.cnblogs.com/// 时 间:2009-7-16// 描 述:日志类,注意需要在日志记录的目录给用户写入权

代码混淆-android混淆代码后崩溃日志中不显示行号的问题

问题描述 android混淆代码后崩溃日志中不显示行号的问题 android混淆代码后崩溃日志中不显示行号,找崩溃的地方很不方便,如何解决,求大神指点,谢谢! 解决方案 问题已解决.原因是在混淆代码时默认会去掉class文件中的调试信息(源码的行号.源文件信息等),需要在混淆配置文件中申明保持这些信息: -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable 解决方案二: tks, 这个问题

storm配置后启动nimbus后查看日志报错

问题描述 storm配置后启动nimbus后查看日志报错 [WARN] Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect java.net.NoRouteToHostException: 没有到主机的路由 at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.7.0_45]