使用过log4c的人都知道,log4c的需要参数是通过logcrc配置文件设定的。例如:
<category name="log4c.examples.helloworld" priority="trace" appender="tiananmen"/>
<appender name="tiananmen" type="rollingfile" layout="logtest" logdir="log" prefix="logtest"rollingpolicy="testrollingpolicy"/>
<layout name="logtest" type="dated"/>
<rollingpolicy name="testrollingpolicy" type="sizewin" maxsize="1024" maxnum="1" />
红色字的设定的日志文件的名称。如果日志文件名字在程序就不能改变了。
我想要通过程序改变日志文件的名字。在网上查了一下,写的都比较基础。外文的资料也懒得去看。看了log4c的例子里也没有介绍。
所以自己研究了一下源码。实现了
int main(int argc, char** argv){
int rc = 0;
log4c_category_t* mycat = NULL;
log4c_appender_t* my_appender = NULL;
if (log4c_init()){
printf("log4c_init() failed");
rc = 1;
}else{
log4c_appender_t* app = NULL;
app = log4c_appender_get("tiananmen");
rollingfile_udata_t *rfup = NULL;
rfup = rollingfile_make_udata();
rollingfile_udata_set_logdir(rfup, ".");
rollingfile_udata_set_files_prefix(rfup, "NIHAO.LOG");
log4c_rollingpolicy_t * rollingpolicyp = log4c_rollingpolicy_get("testrollingpolicy");
rollingfile_udata_set_policy(rfup, rollingpolicyp);
log4c_appender_set_udata(app, rfup);
log4c_rollingpolicy_init(rollingpolicyp, rfup);
mycat = log4c_category_get("log4c.examples.helloworld");
log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "Hello World! = %s\n", "sajfkljsdklfj");
log4c_category_log(mycat, LOG4C_PRIORITY_DEBUG, "HELLO DEBUG %d in file %s", __LINE__, __FILE__);
log4c_category_log(mycat, LOG4C_PRIORITY_WARN, "HELLO DEBUG %d in file %s", __LINE__, __FILE__);
log4c_category_log(mycat, LOG4C_PRIORITY_INFO, "HELLO DEBUG %d in file %s", __LINE__, __FILE__);
log4c_category_log(mycat, LOG4C_PRIORITY_TRACE, "HELLO DEBUG %d in file %s", __LINE__, __FILE__);
/* Explicitly call the log4c cleanup routine */
if ( log4c_fini()){
printf("log4c_fini() failed");
}
}
return 0;
}