- 浏览: 794063 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (417)
- ASP.NET MVC (18)
- WEB基础 (24)
- 数据库 (69)
- iPhone (20)
- JQuery (3)
- Android (21)
- UML (8)
- C# (32)
- 移动技术 (19)
- 条码/RFID (6)
- MAC (8)
- VSS/SVN (6)
- 开卷有益 (4)
- 应用软件 (1)
- 软件工程 (1)
- java/Eclipse/tomcat (61)
- 英语学习 (2)
- 综合 (16)
- SharePoint (7)
- linux (42)
- Solaris/Unix (38)
- weblogic (12)
- c/c++ (42)
- 云 (1)
- sqlite (1)
- FTp (2)
- 项目管理 (2)
- webservice (1)
- apache (4)
- javascript (3)
- Spring/Struts/Mybatis/Hibernate (4)
- 航空业务 (1)
- 测试 (6)
- BPM (1)
最新评论
-
dashengkeji:
1a64f39292ebf4b4bed41d9d6b21ee7 ...
使用POI生成Excel文件,可以自动调整excel列宽等(转) -
zi_wu_xian:
PageOffice操作excel也可以设置表格的行高列宽,并 ...
使用POI生成Excel文件,可以自动调整excel列宽等(转) -
wanggang0321:
亲,我在pptx(office2007以上版本)转pdf的时候 ...
JODConverter]word转pdf心得分享(转) -
xiejanee:
楼主:你好!我想请问下 你在代码中用DOMDocument* ...
Xerces-C++学习之——查询修改XML文档 (转)
Log4c 使用
注:
【转载请注明文章来源、保持原样】
出处:http://www.cnblogs.com/jyli/archive/2010/02/11/1660606.html
作者:李嘉昱
最近想找个好用的Log工具,比较了一下流行的开源Log工具Log4c,Log4CPP, Log4CXX等,觉得还是Log4c比较合适。
Log4cxx需要依赖于APR。
Log4cpp较log4c移植性稍差些。
Log4c基本上都是一些纯c的东西,移植性比其他二者都要好。
上述工具都很优秀,但用熟练一种工具足以,这样有助于提高效率,以后如果有什么满足不了需要的在考虑其他。
在C项目或是C++项目中都是可以使用log4c,恩,就是它了。
Log4c基本概念
Log4c中有三个重要的概念, Category, Appender, Layout。
Category用于区分不同的Logger, 其实它就是个logger。在一个程序中我们可以通过Category来指定很多的Logger,用于不同的目的。
Appdender用于描述输出流,通过为Category来指定一个Appdender,可以决定将log信息来输出到什么地方去,比如stdout, stderr, 文件, 或者是socket等等
Layout用于指定日志信息的格式,通过为Appender来指定一个Layout,可以决定log信息以何种格式来输出,比如是否有带有时间戳, 是否包含文件位置信息等,以及他们在一条log信息中的输出格式的等。
Log4c使用
log4c使用和其他Log4j系工具一样直截了当。
1 // 初始化 2 log4c_init(); 3 // 获取一个已有的category 4 log4c_category_t * mycat = log4c_category_get( " mycat " ); 5 // 用该category进行日志输出,优先级为DEBUG,输出信息为 "Hello World!" 6 log4c_category_log(mycat, LOG4C_PRIORITY_DEBUG, " Hello World! " );
Log4c和所有Log4j系的log工具一样,都是可以通过文件配置log特性的。其配置文件采用xml形式,通常叫做log4crc。通过修改log4crc,可以达到配置log4c的目的。
以上代码片段其对应的log4crc可以是
1 <? xml version="1.0" encoding="ISO-8859-1" ?> 2 <! DOCTYPE log4c SYSTEM "" > 3 4 < log4c version ="1.2.1" > 5 < config > 6 < bufsize > 0 </ bufsize > 7 < debug level ="2" /> 8 < nocleanup > 0 </ nocleanup > 9 < reread > 1 </ reread > 10 </ config > 11 .... 12 < category name ="mycat" priority ="debug" appender ="stdout" /> 13 < appender name ="stdout" type ="stream" layout ="basic" /> 14 < layout name ="basic" type ="basic" /> 15 </ log4c >
从log4crc中也可以看到Category, Appender, Layout三者之间的关系,一个Category需要为其指定一个appender, 一个appender亦要为其指定一个layout。
Log4c中已经提供了几种默认类型的appender和layout。
appender一般是不需要自己来扩展了,我觉得够用了,一般也就是file, stdout, stderr这几个,而这几种类型Log4c都提供了。
layout我倒是认为有必要扩展一下,Log4c提供的几种默认layout类型信息不够丰富,有时候恐怕无法满足需要。譬如,默认的Layout类型中没有提供能够记录Log事件发生
位置(如文件,行,函数)的格式。所以,如果需要的话就自己定义个格式好了,还是很简单的,我会根据自己的需要和喜好来定义自己的格式。
另外,看这样一条日志记录语句
log4c_category_log(mycat, LOG4C_PRIORITY_DEBUG, "Hello World!");
是不是有点长了呢,每次都敲这么长一串实在是很麻烦,比起log4cpp或者log4cxx相对就简短一些。
首先因为log4c是纯c的东西,就不能以面向对象的方式来调用,在他的log函数中必须指定一个category为参数。
然后才是log level参数, log4c中为log level定义的枚举类型也够长的,像 LOG4C_PRIORITY_DEBUG,LOG4C_PRIORITY_ERROR等,输起来很麻烦。
最后才是你要输出的message.
通过宏的扩展,可以很容易做到让log4c像其他log4j系工具一样使用简单。那就用宏扩展一下吧。
用宏来简化Log4c的使用
看其Log的优先级定义,共有11个。
1 typedef enum { 2 /* * fatal */ LOG4C_PRIORITY_FATAL = 000 , 3 /* * alert */ LOG4C_PRIORITY_ALERT = 100 , 4 /* * crit */ LOG4C_PRIORITY_CRIT = 200 , 5 /* * error */ LOG4C_PRIORITY_ERROR = 300 , 6 /* * warn */ LOG4C_PRIORITY_WARN = 400 , 7 /* * notice */ LOG4C_PRIORITY_NOTICE = 500 , 8 /* * info */ LOG4C_PRIORITY_INFO = 600 , 9 /* * debug */ LOG4C_PRIORITY_DEBUG = 700 , 10 /* * trace */ LOG4C_PRIORITY_TRACE = 800 , 11 /* * notset */ LOG4C_PRIORITY_NOTSET = 900 , 12 /* * unknown */ LOG4C_PRIORITY_UNKNOWN = 1000 13 } log4c_priority_level_t;
实际上,我觉的用不了那么多优先级,有差不多5个就够了,比如最典型的几个吧,error, warn, info, debug, trace。
1 /* 2 * logger.h 3 * 4 * Created on: 5 * Author: lijy 6 */ 7 8 #ifndef LOGGER_H_ 9 #define LOGGER_H_ 10 11 #include " log4c.h " 12 13 #define LOG_ERROR(category, msg, args...) \ 14 { \ 15 const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL);\ 16 log4c_category_log_locinfo(mycat, & locinfo, LOG4C_PRIORITY_ERROR, msg, ##args); \ 17 } 18 19 #define LOG_WARN(category, msg, args...) \ 20 { \ 21 const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL);\ 22 log4c_category_log_locinfo(mycat, & locinfo, LOG4C_PRIORITY_WARN, msg, ##args); \ 23 } 24 25 #define LOG_INFO(category, msg, args...) \ 26 { \ 27 const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL); \ 28 log4c_category_log_locinfo(mycat, & locinfo, LOG4C_PRIORITY_INFO, msg, ##args); \ 29 } 30 31 #define LOG_DEBUG(category, msg, args...) \ 32 { \ 33 const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL); \ 34 log4c_category_log_locinfo(mycat, & locinfo, LOG4C_PRIORITY_DEBUG, msg, ##args); \ 35 } 36 37 #define LOG_TRACE(category, msg, args...) \ 38 { \ 39 const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL);\ 40 log4c_category_log_locinfo(mycat, & locinfo, LOG4C_PRIORITY_TRACE, msg, ##args); \ 41 } 42 43 #endif /* LOGGER_H_ */
OK,现在同样是输出一个"Hello World!",比较下用宏扩展前后的差别吧
log4c_category_log(mycat, LOG4C_PRIORITY_DEBUG, "Hello World!"); <==>
LOG_DEBUG(mycat, "Hello World!")
应该能少敲不少代码吧。
发表评论
-
c++ cin输入int的用法
2014-06-10 11:17 1353int icin = 0; for(int i =0; ... -
Linux下case报错syntax error near unexpected token `in
2014-05-20 16:16 1105来分享一个在Linux下执 ... -
查看linux某目录下所有普通文件,不含目录
2014-05-14 15:15 0#include <fstream>#i ... -
scp sz
2014-03-31 18:15 0使用的是secureCRT 那么先拷贝到这台服务器上,再下 ... -
Linux可执行文件执行时找不到共享库
2014-03-31 18:09 2261编译程序时使用了如下参数指定了链接库的位置,但是执 ... -
C++ assert机制
2014-03-06 10:21 925C++ assert机制 ASSERT ... -
为什么C++语言中既有指针也有引用
2013-11-19 11:16 0写在前面的话,本文是 ... -
C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
2013-11-19 10:20 806栈,就是那些由编译器 ... -
堆内存和栈内存
2013-11-19 10:13 0堆内存就是你用new 修饰符创建的内容会在堆内存中开辟一段空 ... -
C++使用CLI连接DB2
2013-11-15 09:31 3374<!--推荐博文--> ... -
使用 C++ 处理 JSON 数据交换格式
2013-09-10 11:10 909一、摘要 JSON 的全称为:JavaScript Obj ... -
C++的Json解析库:jsoncpp和boost (转)
2013-09-10 10:40 6624JSON(JavaScript Object Notatio ... -
C++ JsonCpp 使用(转)
2013-09-10 10:21 1778前言 JSON是一个轻量级 ... -
C++中map容器的说明和使用技巧(转)
2013-08-22 15:01 1031C++中map容器提供一个键值对容器,map与multim ... -
C++中各种类型的成员变量的初始化方法(转)
2013-08-01 15:26 1018c++各种不同类型成员根据是否static 、时候con ... -
Xerces浅析
2013-07-30 14:15 3139本篇文章主要讲述项目 ... -
Xerces C++ 学习笔记 (转)
2013-07-24 17:04 13191. 初始化平台: XMLPlatformUtils: ... -
Boost智能指针——shared_ptr (转)
2013-07-16 17:27 1783boost::scoped_ptr虽然简单易用,但它不能共享 ... -
GDB调试精粹及使用实例 (转)
2013-07-16 16:21 1071一:列文件清单1. List( ... -
Xerces-C++学习之——查询修改XML文档 (转)
2013-07-16 16:02 3343/** ========================== ...
相关推荐
**log4c 框架详解** log4c 是一个基于 C 语言的日志记录框架,它借鉴了 Java 中的 log4j 设计理念,旨在为 C 语言开发者提供一个功能强大、灵活且易于使用的日志系统。这个压缩包包含了 log4c 的一个完整实例,适合...
**如何使用log4c日志库:测试例子程序** 在软件开发中,日志记录是一项至关重要的任务,它有助于调试、性能分析以及问题排查。log4c是一个针对C语言的开源日志库,模仿了Java的log4j设计,提供了一个灵活且功能强大...
《log4c-1.2.1:C语言编写的高效日志库》 在软件开发过程中,日志记录是一项至关重要的任务,它能够帮助开发者追踪程序运行状态,定位和解决问题。"log4c-1.2.1"便是这样一个专为C语言编程设计的日志库,它提供了...
### log4c开发手册知识点概览 #### 一、引言 Log4C是一款基于C语言的开源日志工具库,旨在为C语言开发者提供一个高效且可配置的日志记录解决方案。通过它,用户可以轻松地在自己的项目中集成日志功能,并能够根据...
log4c的源代码。log4c是用C语言编写的日志工具,借鉴了log4j的思想,可以自由配置日志的输出格式、输出文件等,是一个很方便的程序调试、运行追踪工具。还有一个C语言的日志工具是ZLog,与这个有些像。
Log4c is a library of C for flexible logging to files, syslog and other destinations. It is modeled after the Log for Java library (http://jakarta.apache.org/log4j/), .
《log4c-2.0.1:强化日志管理的新版本》 log4c-2.0.1是一款在原有log4c-2.0.0基础上进行升级的开源日志库,专为C语言应用程序设计,致力于提供高效、灵活的日志记录功能。此次更新的核心亮点在于引入了Cache模块,...
### Log4C 配置与开发指南 #### 1. 引言 Log4C是一款基于C语言的高效日志库,旨在为C语言开发者提供一个可配置且高效的日志记录解决方案。它提供了大多数项目所需的经典日志功能,并且通过灵活的配置方式,能够满足...
Log4c win32例子调用Log4c win32例子调用Log4c win32例子调用Log4c win32例子调用Log4c win32例子调用Log4c win32例子调用Log4c win32例子调用
《深入解析log4c——基于源码的剖析》 在软件开发中,日志记录扮演着至关重要的角色,它能够帮助开发者追踪程序运行状态、定位问题所在,甚至为系统性能优化提供依据。log4c是C语言实现的一个日志记录框架,类似于...
标题"Log4c压缩包"指的是一个包含Log4c库的压缩文件,Log4c是Linux环境下广泛使用的日志记录框架。它借鉴了Java世界的Log4j设计模式,为C语言提供了强大的日志处理功能。描述中提到Log4c在开发时作为写日志的工具...
【简易版log4C#】是一个专门为C#开发者设计的日志记录工具,它的核心目标是提供一个简单易用、功能实用的日志管理方案。在这个简易版本中,它着重于按月生成日志文件,便于开发者追踪和分析程序运行时的问题。这种...
本项目关注的是如何使用C++中的DataFrame库对接MySQL数据库,并结合log4c++进行日志记录,提升开发效率和代码可维护性。下面将详细阐述相关知识点。 首先,`DataFrame`是一个类似于Python中的pandas DataFrame的...
可以灵活配置日志输出的格式,类似于log4j的pattern layout 纲目分类模型,比log4j系列的继承模型更加清晰 多种输出,包括动态文件、静态文件、stdout、stderr、syslog 可以在运行时动态刷新配置,只需要调用函数...
在原来的log4c-1.2.1的基础上重新架构优化,实现日志的配置式管理,内含使用说明文档......
"Log4c for VxWorks" 指的是 Log4c 这个开源日志库被适配和应用于 VxWorks 实时操作系统。Log4c 是一个基于 C 语言的日志记录框架,它借鉴了 Java 的 Log4j 设计理念,为 C 语言开发提供了强大的日志处理功能。...
一个C/C++日志记录模块,它是对开源log4c进行的封装和修正的基础上,将所有的代码都集成到一个.h头文件中。带来的革命性突破是日志模块的使用是那么的方便和简单:只要使用一个.h头文件即可无缝的将日志模块嵌入到你...
dadad awee ra ewrae rawer awerq
**Log4Cplus 开发包详解** Log4Cplus 是一个流行的开源日志记录框架,专为C++设计,提供类似Java的Log4j的功能。它使得在C++应用程序中进行日志记录变得简单而高效。这个开发包是64位版本,包括了Debug和Release...