2013-08-20 84 views
1

我想爲我的C應用程序日誌記錄使用log4c。爲了實現滾動策略,我使用了log4c滾動文件API。我從Log4C開發者那裏瞭解到,通過編輯配置文件(log4crc)可以實現滾動策略。我嘗試將appender名稱編輯到配置文件中的日誌文件路徑。但是應用程序運行時沒有記錄。任何人都可以告訴我如何使用log4c實現滾動日誌機制?無法使用log4crc配置文件

請參閱我的HelloWorld應用程序示例和下面的配置文件:

#include<stdio.h> 

#include"log4c.h" 

int main(int argc, char** argv) 
{ 
    int rc = 0; 
    log4c_category_t* mycat = NULL; 

    if (log4c_init()){ 
    printf("log4c_init() failed"); 
    rc = 1; 
    }else{ 
     mycat = log4c_category_get("log4c.examples.helloworld"); 

     log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "Hello World!"); 

    /* Explicitly call the log4c cleanup routine */ 
    if (log4c_fini()){ 
     printf("log4c_fini() failed"); 
    } 
    } 
    return 0; 
} 

配置文件如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE log4c SYSTEM ""> 

<log4c version="1.2.3"> 

     <config> 
       <bufsize>0</bufsize> 
       <debug level="2"/> 
       <nocleanup>0</nocleanup> 
       <reread>1</reread> 
     </config> 

     <category name="root" priority="notice"/> 
     <category name="six13log.log" priority="error" appender="stdout" /> 

     <rollingpolicy name="myrollingpolicy" type="sizewin" maxsize="1024" maxnum="10" /> 

     <appender name="myrollingfileappender" type="rollingfile" logdir="." prefix="myprefix" layout="dated" rollingpolicy="myrollingpolicy" /> 

     <appender name="stdout" type="stream" layout="basic"/> 
     <appender name="stderr" type="stream" layout="dated"/> 
     <appender name="syslog" type="syslog" layout="basic"/> 


     <appender name="s13file" type="s13_file" layout="basic"/> 
     <appender name="plain_stderr" type="s13_stderr" layout="none"/> 
     <appender name="cat_stderr" type="s13_stderr" layout="catlayout"/> 
     <appender name="xml_stderr" type="s13_stderr" layout="xmllayout"/> 
     <appender name="user_stderr" type="s13_stderr" layout="userlayout"/> 

     <layout name="basic" type="basic"/> 
     <layout name="dated" type="dated"/> 

     <layout name="catlayout" type="s13_cat"/> 
     <layout name="xmllayout" type="s13_xml"/> 
     <layout name="none" type="s13_none"/> 
     <layout name="userlayout" type="s13_userloc"/> 

     <category name="six13log.log.app.application2" priority="debug" appender="cat_stderr" /> 
     <category name="six13log.log.app.application3" priority="debug" appender="user_stderr" /> 
     <category name="six13log.log.app" priority="debug" appender="myrollingfileappender" /> 

     <category name="log4c.examples.helloworld" priority="debug" appender="stdout"/> 
     <category name="log4c.examples.helloworld" priority="debug" appender="/home .. /..filename.txt"/> 

</log4c> 

我編輯的日誌記錄配置文件中的最後兩行。 請讓我知道我的log4crc配置文件有什麼問題,以及我如何使用配置文件來實現日誌記錄而不使用log4c滾動策略apis?

回答

0

我也是log4c的新手。但是我知道你的log4c配置文件 你有類別名稱"log4c.examples.helloworld"兩次。所以當你寫log4c_category_get("log4c.examples.helloworld")它會從CRC文件中檢查並得到appender的名字。 對應於log4c.examples.helloworld appender的名字是"stdout""/home .. /..filename.txt"。第一個是正確的,因爲它將輸出到屏幕。最後一個是不合適的。不要在那裏指定文件路徑。將相應的名稱/字符串添加到appender名稱中。然後在appender name中有logdir value,您可以在其中指定要創建文件的目錄。

0

您log4crc文件檢查是否包含在helloworld目錄

0

中完全刪除的版本號爲我工作:

Change 
    <log4c version="1.2.3"> 
to 
    <log4c>