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

来源:互联网 发布:旅游产品网络营销策划 编辑:程序博客网 时间:2024/05/17 22:02


笔记一:

         要在程序里实现与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代码的效果,只需使用如下调用:






原创粉丝点击