/*
return fprintf(fp, "[%s] [%s] [%d] [%d] [%s] [%s] [%d]/n%s",
log4c_appender_get_name(this),
a_event->evt_category,
a_event->evt_priority,
a_event->evt_timestamp.tv_sec*1000000 + a_event->evt_timestamp.tv_usec,
a_event->evt_msg,
a_event->evt_loc->loc_file,
a_event->evt_loc->loc_line,
a_event->evt_rendered_msg);
*/
return fprintf(fp, "%s/n", a_event->evt_rendered_msg);
}
static int test_open(log4c_appender_t* a_appender)
{
FILE* fp = log4c_appender_get_udata(a_appender);
if (fp)
return 0;
if ( (fp = fopen(log4c_appender_get_name(a_appender), "a+")) == NULL)
fp = stderr;
/* unbuffered mode */
setbuf(fp, NULL);
log4c_appender_set_udata(a_appender, fp);
return 0;
}
static int test_close(log4c_appender_t* a_appender)
{
FILE* fp = log4c_appender_get_udata(a_appender);
return (fp ? fclose(fp) : 0);
}
const log4c_appender_type_t log4c_appender_type_test_file = {
"test_file",//输出流的名称,用于配置文件设置
test_open, //打开输出流的函数
test_file_append,//给输出流追加日志信息的函数
test_close,//关闭输出流的函数
};
6.2将自定义输出流添加到Log4c的配置中:
6.3自定义输出流的使用
7.自定义rollingpolicy
源代码中有一个sizewin的rollingpolicy,是根据文件大小进行生成日志控制的。
在这里添加一个根据时间的控制日志输出的策略,实现代码如下:
7.1 rollingpolicy_type_timewin.h
#ifndef log4c_policy_type_timewin_h
#define log4c_policy_type_timewin_h
#include <log4c/defs.h>
#include <log4c/rollingpolicy.h>
__LOG4C_BEGIN_DECLS
LOG4C_API const log4c_rollingpolicy_type_t log4c_rollingpolicy_type_timewin;
typedef struct __timewin_udata rollingpolicy_timewin_udata_t;
#define TIME_TYPE_HOUR0
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23402-4.html
很棒