log4c日志库在Linux中的使用

1.简介
Log4c基本概念
Log4c中有三个重要的概念, Category, Appender, Layout。
  • Category用于区分不同的Logger, 其实它就是个logger。在一个程序中我们可以通过Category来指定很多的Logger,用于不同的目的。
  • Appender用于描述输出流,通过为Category来指定一个Appender,可以决定将log信息来输出到什么地方去,比如stdout, stderr, 文件, 或者是socket等等
  • Layout用于指定日志信息的格式,通过为Appender来指定一个Layout,可以决定log信息以何种格式来输出,比如是否有带有时间戳, 是否包含文件位置信息等,以及他们在一条log信息中的输出格式的等。

2.下载log4c
log4c :http://sourceforge.net/projects/log4c/

3.安装
我的操作系统是RHEL5,直接解压安装即可。
#tar xvzf log4c-1.2.1.tar.gz
#cd log4c-1.2.1
#./configure --prefix=/usr/local
#make
#make install
log4c在Linux中的使用 - myswirl - 漩涡的窝
安装成功会在/usr/local/lib下看到liblog4cplus.a,在/usr/local/include下有个liblog4cplus文件夹
注意:将/usr/local/lib下的文件copy到/usr/lib.

4.第一个例子

可从CSDN下载: http://download.csdn.net/source/2629059  ,或者直接copy下面代码。

工程文件如下图所示:

log4c在Linux中的使用 - myswirl - 漩涡的窝
 
本工程共7个文件,源码如下:
----------------------------------------------------main.c---------------------------------------------------------------
#include <stdio.h>
#include "mylog.h"
#include "other.h"

int main(int argv, char **argc) {
  int i;
    if ( mylog_init() == 1 )
    {
        printf("mylog_init() failed!\n");
    }
    
    for(i=0;i<140000;i++)
    {
        LOG("%s%d","Hello!-",i);    
        otherFunc();
    }
    if(mylog_fini() == 1)
    {
        printf("mylog_fini() failed!\n");
    }
    return 0;
}

----------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------Makefile-------------------------------------------------------
TARGET=log4ctest
OBJS=main.o other.o mylog.o
INC=./
LOG4CINC=/usr/local/include/log4c
LIBPATH=./

%.o:%.c
    g++ -c -I$(LOG4CINC) -I$(INC) $< -o $@

%.o:%.cpp 
    g++ -Wall -c -g -I$(INC) $< -o $@ 

$(TARGET):$(OBJS)
    g++  $(OBJS) -llog4c -o $(TARGET)

.PHONY:clean

clean:
    rm *.o $(TARGET)

----------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------log4crc----------------------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE log4c SYSTEM "">
<log4c version="1.2.1">
    <config>
        <bufsize>0</bufsize>
        <debug level="2"/>
        <nocleanup>0</nocleanup>
        <reread>1</reread>
    </config>
 
    <category name="root" priority="notice"/>
      <category name="linuxany.com" priority="debug" appender="stderr" />
    <category name="log4ctest" priority="debug" appender="myrollingfileappender" />
    
    <rollingpolicy name="myrollingpolicy" type="sizewin" maxsize="104857600" maxnum="10" />
 
    <appender name="myrollingfileappender" type="rollingfile" logdir="./" prefix="mylogfile" 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"/>
 
</log4c>

----------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------other.h-------------------------------------------------------

void otherFunc(void);

----------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------other.c------------------------------------------------------
#include "mylog.h"
#include "other.h"

void otherFunc(void)
{
    LOG("%s","Enter");        
}

-----------------------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------mylog.h-----------------------------------------------------
#ifndef _MYLOG_H_
#define _MYLOG_H_

#include <string.h>
#include <stdlib.h>

#ifdef __cplusplus
extern "C"
{
#endif

#include "log4c.h"

#ifdef __cplusplus
}
#endif

#define MYLOG_CATEGORY_NAME "log4ctest"
#define MYLOG_PRIORITY LOG4C_PRIORITY_WARN

//1.LOG4C_PRIORITY_ERROR
//2.LOG4C_PRIORITY_WARN
//3.LOG4C_PRIORITY_NOTICE
//4.LOG4C_PRIORITY_DEBUG
//5.LOG4C_PRIORITY_TRACE

extern int mylog_init();
extern void log_message(char* file, int line, const char* func,const char* a_format, ...);
extern int mylog_fini();
#define LOG(fmt,args...) log_message(__FILE__, __LINE__, __FUNCTION__,fmt ,## args);
#endif


-----------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------mylog.c-----------------------------------------------------

#include "mylog.h"

const char *format = "[%10s][%4d][%10s()]: ";

log4c_category_t* mycat = NULL;

int mylog_init()
{
    if (log4c_init() == 1)
    {
        return 1;
    }
    mycat = log4c_category_get(MYLOG_CATEGORY_NAME);
    return 0 ;
}

void log_message(char* file, int line, const char* func,const char* a_format, ...) 
{
    char *file_info;
    char *new_format;
    size_t info_len;
    size_t new_format_len;
    va_list va;
    
    info_len = strlen(format) + 50;
    file_info = (char *) malloc(info_len);
    sprintf(file_info, format,file, line,func );
    
    new_format_len = strlen(file_info) + strlen(a_format) + 2;
    new_format = (char *) malloc(new_format_len);
    sprintf(new_format, "%s%s", file_info, a_format);
    
    va_start(va, a_format);
    log4c_category_vlog(mycat, MYLOG_PRIORITY, new_format, va);
    va_end(va);
    
    free(file_info);
    free(new_format);
}

int mylog_fini()
{
    return(log4c_fini());
}


-----------------------------------------------------------------------------------------------------------------------------


编译、运行结果如下图所示:
log4c在Linux中的使用 - myswirl - 漩涡的窝
 
日志文件:mylogfile.0
log4c在Linux中的使用 - myswirl - 漩涡的窝
log4c 是一个为 C 语言环境提供的日志记录,类似于 Java Log4j。在 Linux 系统,你可以通过多种方式下载和安装 log4c。以下是一些常见的方法: 1. 使用包管理器:如果你的 Linux 发行版提供了 log4c 的包,你可以使用包管理器来安装。例如,在基于 Debian 的系统(如 Ubuntu),你可以使用 `apt-get` 命令: ```bash sudo apt-get update sudo apt-get install liblog4c-dev ``` 在基于 RedHat 的系统(如 CentOS),你可以使用 `yum` 或 `dnf` 命令: ```bash sudo yum install log4c-devel # 或者 sudo dnf install log4c-devel ``` 2. 下载源代码:如果包管理器没有可用的包,或者你需要特定版本的 log4c,你可以从 log4c 的官方网站或其在 GitHub 上的仓下载源代码。 下载地址:http://log4c.sourceforge.net/ 或者 GitHub 仓地址:https://github.com/log4c/log4c 你可以使用 `wget` 或 `curl` 命令下载源代码包: ```bash wget http://sourceforge.net/projects/log4c/files/log4c/1.2.4/log4c-1.2.4.tar.gz # 或者 curl -O http://sourceforge.net/projects/log4c/files/log4c/1.2.4/log4c-1.2.4.tar.gz ``` 3. 编译安装:下载源代码后,你可以解压源代码包并使用标准的 `configure`、`make` 和 `make install` 命令来编译和安装 log4c: ```bash tar -zxvf log4c-1.2.4.tar.gz cd log4c-1.2.4 ./configure make sudo make install ``` 在安装前,请确保你的系统已经安装了编译所需的依赖包,如 `gcc`、`make`、`libtool` 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值