log4c-在程序中设定日志文件名

来源:互联网 发布:linux 不支持ext4 编辑:程序博客网 时间:2024/04/30 09:02

使用过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;
}

0 0
原创粉丝点击