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


笔记一:

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






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值