您的位置:首页 > 运维架构 > Linux

-----log4c日志库在Linux中的使用 -------------

2014-01-17 21:53 381 查看


转自:http://myswirl.blog.163.com/blog/static/5131864220107176422690/


log4c日志库在Linux中的使用

2010-08-17 18:04:22| 分类: C/C++|举报|字号 订阅

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



安装成功会在/usr/local/lib下看到liblog4cplus.a,在/usr/local/include下有个liblog4cplus文件夹

注意:将/usr/local/lib下的文件copy到/usr/lib.

4.第一个例子

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

工程文件如下图所示:





本工程共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());

}

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


编译、运行结果如下图所示:




日志文件:mylogfile.0

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: