您的位置:首页 > 编程语言

log4c 代码实现log4crc的配置相应的功能

2011-09-16 15:40 148 查看
笔记一:

要在程序里实现与log4crc配置文件同样的功能来代替配置文件的作用,可以在没有log4crc的情况下正常使用,下面主要把相应的category、appender、ngfilepolicy标签转成相应的代码实现功能。如下XML代码为设置category:

<category name="myemerglog" priority="alert" appender="stdout" />
想要得到上面那行的XML代码的效果,只需使用如下调用:
log_category_create("myemerglog", "alert", "stdout");

log_category接口实现为:

int log_category_create(const char *category_name, const char *category_priority,
const char *appender_name)
{
ASSERT(category_name != NULL && category_priority != NULL && appender_name != NULL,
"category_name,category_priority or appender_name is NULL\n");

log4c_category_t *cat = NULL;
cat = log4c_category_get(category_name);

log4c_category_set_priority(cat,
log4c_priority_to_int(category_priority));

log4c_category_set_appender(cat, log4c_appender_get(appender_name));

return 0;
}


如上代码注释处,想要设置一个category或者appender,先用log4c_xxx_get(xxx_name)返回对应名字的category或appender,然后用log4c_xxx_set_yyy()等系列接口进行设置。

如下XML代码为设置category:

<appender name="emergrollingfile" type="rollingfile" logdir="/var/log/" prefix="emerglog" layout="user_dated" rollingpolicy="emergrollingpolicy" />

想要得到上面那行的XML代码的效果,只需使用如下调用:

log_appender_create("emergrollingfile", "file", "user_dated","emergrollingpolicy", "/var/log/", "emerglog");


log_appender_create相应的实现为:

int log_appender_create(const char *appender_name, const char *app_type,
const char *layout_name, const char *rpolicy_name,
const char *logdir, const char *prefix)
{
ASSERT(appender_name != NULL && app_type != NULL && layout_name != NULL,
"appender name or app_type or layout_name is NULL!\n");

if (strcasecmp(app_type, "file") == 0)
{
log4c_appender_t *app = NULL;
app = log4c_appender_get(appender_name);
log4c_appender_set_type(app, log4c_appender_type_get("rollingfile"));

rollingfile_udata_t *rfup = NULL;
rfup = rollingfile_make_udata();
rollingfile_udata_set_logdir(rfup, (char *)logdir);
rollingfile_udata_set_files_prefix(rfup, (char *)prefix);

log4c_rollingpolicy_t *rollingpolicyp = NULL;
rollingpolicyp = log4c_rollingpolicy_get(rpolicy_name);
rollingfile_udata_set_policy(rfup, rollingpolicyp);
log4c_appender_set_udata(app, rfup);

log4c_rollingpolicy_init(rollingpolicyp, rfup);

if (layout_name != NULL)
log4c_appender_set_layout(app, log4c_layout_get(layout_name));
}
else if ( (strcasecmp(appender_name, "stdout") == 0
|| strcasecmp(appender_name, "stderr") == 0)
&& strcasecmp(app_type, "stream") == 0)
{
log4c_appender_t *app = NULL;
app = log4c_appender_get(appender_name);
log4c_appender_set_type(app, log4c_appender_type_get(app_type));

if (layout_name != NULL)
log4c_appender_set_layout(app, log4c_layout_get(layout_name));
}
else if (strcasecmp(appender_name, "syslog") == 0)
{
}
else
{
return ZIP_FAILURE;
}

return ZIP_SUCCESS;
}

如下XML代码为设置rollingpolicy:

<rollingpolicy name="emergrollingpolicy" type="sizewin" maxsize="104857600" maxnum="10" />
想要得到上面那行的XML代码的效果,只需使用如下调用:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐