log4c編譯與簡單使用總結

一)解壓下載的log4c-1.2.4.tar.gz源碼,進入文件夾中,打開README,編譯的過程能夠按照裏面的流程linux

$mkdir build;
$cd build
$../log4c-1.2.4/configure --prefix=/path/of/installation
$make 
$make install

假如咱們要安裝的目錄爲/home/abc/a,則上面第三句則爲shell

$../log3c-1.2.4/configure --prefix=/home/abc/a

若是你是爲了在其餘平臺運行的話,好比ARM平臺,則能夠用以下指令app

$../log3c-1.2.4/configure --prefix=/home/abc/a --host=arm-linux --without-expat

    沒加without--expat的話要在你的電腦安裝適於交叉環境的expat才能正常編譯。   ui

    這樣執行出來的結果是多了一個build目錄,這裏面不只包含了Makefile文件,還包含了example生成的可執行文件,另外還在/home/abc/a下多了安裝的log4c等文件,包含了運行庫lib,頭文件等.這個是本身編寫程序運行的關鍵部分.debug

二)若是你只是想運行一個example下的文件的話,能夠運行build中的example中的可執行文件,日誌的輸出配置是在log4crc中配置的,不用去修改example中的C語言源碼再從新編譯,從這個角度出現的話,能夠體會一下log4crc配置日誌代碼的功能.
日誌

三)下面介紹的是用學有源碼example中的helloworld.c爲咱們的主文件,編譯可執行的文件.通常一個具體的有日誌功能的工程包含下面幾類文件:code

    1)用戶自定義c語言源文件,*.c與*.h
ci

    2)log4c運行庫文件與依賴頭文件,這個看你我的存放的目錄,像我以前的目錄就是/home/abc/a中,裏面的文件有
get

    咱們程序要用到的是lib中的動態連接庫和include中的文件.源碼

    3)log4crc文件,這個是配置輸出的日誌的格式等,通常一個最簡單的可編譯文件下最少有一個.c文件和一個log4crc文件.

在該目錄下打開終端,輸入以下開始編譯

gcc -g -Wall -O0 helloworld.c -o helloworld -L/home/abc/a/lib -llog4c -I/home/abc/a/include

這樣就會編譯與功了.   

    4)修改一下log4crc文件,其餘大部分的log4crc文件都是相似的,你能夠打開文件,看有沒有如下三句,若是沒有的話,添加進去,有的話能夠不會,可能有添加的是第一行.

<category name="log4c.examples.helloworld" priority="debug" appender = "stdout"/>
<appednder name="stdout" type="stream" layout="basis"/>
<layout name="basic" type="basic"/>

    5)運行程序

./helloworld

會輸出以下的信息:

[stdout] ERROR    log4c.examples.helloworld - Hello World!

    到此,咱們的編譯就自算完成了,其餘的應用也是在這樣的環境中添加更多的功能.祝各位好運.

附:Helloworld.c的程序

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#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 rc;
}