参考了李嘉昱的这篇博文,在此表示感谢。
1. log4c的使用
log4c_init(); // 初始化log4c logcat = log4c_category_get(LOG_CATEGORY_NAME); // 获取一个已有的category log4c_category_log(logcat, LOG4C_PRIORITY_DEBUG, "Hello World!"); //用该category进行日志输出,优先级为DEBUG,输出信息为 "Hello World!" log4c_fini(); // 销毁log4c
使用宏定义简化输出过程:
#ifndef LOGGER_H #define LOGGER_H #include "log4c.h" #define LOG_ERROR(category, msg, args...) \ { \ const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL); \ log4c_category_log_locinfo(category, &locinfo, LOG4C_PRIORITY_ERROR, msg, ##args); \ } #define LOG_WARN(category, msg, args...) \ { \ const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL); \ log4c_category_log_locinfo(category, &locinfo, LOG4C_PRIORITY_WARN, msg, ##args); \ } #define LOG_INFO(category, msg, args...) \ { \ const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL); \ log4c_category_log_locinfo(category, &locinfo, LOG4C_PRIORITY_INFO, msg, ##args); \ } #define LOG_DEBUG(category, msg, args...) \ { \ const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL); \ log4c_category_log_locinfo(category, &locinfo, LOG4C_PRIORITY_DEBUG, msg, ##args); \ } #define LOG_TRACE(category, msg, args...) \ { \ const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL); \ log4c_category_log_locinfo(category, &locinfo, LOG4C_PRIORITY_TRACE, msg, ##args); \ } #endif // LOGGER_H
2. log4c的配置
log4c的配置文件名为:log4crc,是一个XML文件,存放在工程目录中即可。
常用的配置文件例子:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE log4c SYSTEM ""> <log4c version="1.2.1"> <config> <bufsize>0</bufsize> <debug level="2"/> <nocleanup>0</nocleanup> <reread>1</reread> </config> <category name="root" priority="notice"/> <category name="log4c.examples.helloworld" priority="debug" appender="myrollingfileappender"/> <appender name="myrollingfileappender" type="rollingfile" logdir="./" prefix="mylogfile" layout="basic" rollingpolicy="myrollingpolicy" /> <appender name="stdout" type="stream" layout="basic"/> <layout name="basic" type="basic"/> <layout name="dated" type="dated"/> <rollingpolicy name="myrollingpolicy" type="sizewin" maxsize="10400" maxnum="10" /> </log4c>
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE log4c SYSTEM ""> <log4c version="1.2.1"> <config> <bufsize>0</bufsize> <debug level="2"/> <nocleanup>0</nocleanup> <reread>1</reread> </config> <category name="root" priority="notice"/> <category name="six13log.log" priority="error" appender="stdout"/> <!--输出到控制台--> <category name="WLAN_Console" priority="trace" appender="stdout"/> <!--保存日志到文件--> <category name="WLAN_File" priority="trace" appender="myrollingfileappender"/> <!--logdir为日志输出路径 prefix为文件名 layout为输出格式--> <appender name="myrollingfileappender" type="rollingfile" logdir="." prefix="wlan_log" layout="dated" rollingpolicy="myrollingpolicy"/> <!--sizewin表示达到最大值后新建日志文件 值由maxsize设定,单位Bytes maxnum为最大文件数目--> <rollingpolicy name="myrollingpolicy" type="sizewin" maxsize="102400" maxnum="10"/> <appender name="stdout" type="stream" layout="basic"/> <appender name="stderr" type="stream" layout="dated"/> <appender name="syslog" type="syslog" layout="basic"/> <appender name="s13file" type="s13_file" layout="basic"/> <appender name="plain_stderr" type="s13_stderr" layout="none"/> <appender name="cat_stderr" type="s13_stderr" layout="catlayout"/> <appender name="xml_stderr" type="s13_stderr" layout="xmllayout"/> <appender name="user_stderr" type="s13_stderr" layout="userlayout"/> <layout name="basic" type="basic"/> <layout name="dated" type="dated"/> <layout name="catlayout" type="s13_cat"/> <layout name="xmllayout" type="s13_xml"/> <layout name="none" type="s13_none"/> <layout name="userlayout" type="s13_userloc"/> <category name="six13log.log.app.application2" priority="debug" appender="cat_stderr"/> <category name="six13log.log.app.application3" priority="debug" appender="user_stderr"/> <category name="six13log.log.app" priority="debug" appender="myrollingfileappender"/> <category name="log4c.examples.helloworld" priority="debug" appender="stdout"/> </log4c>