Log4c 사용

24520 단어 log
// <![CDATA[
document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text"); if (text && text.length > 300) {text = text + "\ r < br > < br > 본문 은 CSDN 블 로그 에서 왔 습 니 다. 출처 를 표시 하 십시오:" + location. href; clipboardData. setData ("text", text);}, 100);} & \ # 13;
// ]]>
// <![CDATA[
function StorePage() { d = document; t = d.selection ? (d.selection.type != 'None' ? d.selection.createRange().text : '') : (d.getSelection ? d.getSelection() : ''); void (keyit = window.open('http://www.365key.com/storeit.aspx?t=' + escape(d.title) + '&u=' + escape(d.location.href) + '&c=' + escape(t), 'keyit', 'scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes')); keyit.focus(); }
// ]]>
주의: [전재 시 문장의 출처 를 밝 히 고 그대로 유지 하 세 요]
출처: http://www.cnblogs.com/jyli/archive/2010/02/11/1660606.html 저자: 이 가 욱
최근 에 사용 하기 좋 은 Log 도 구 를 찾 고 싶 습 니 다. 유행 하 는 오픈 소스 Log 도구 Log4c, Log4CPP, Log4CXX 등 을 비교 해 보 니 Log4c 가 적당 하 다 고 생각 합 니 다. Log4cxx 는 APR 에 의존 해 야 합 니 다. Log4cpp 는 log4c 보다 이식 성 이 약간 떨 어 집 니 다. Log4c 는 기본적으로 순수 c 의 것 으로 이식 성 이 다른 두 가지 보다 좋 습 니 다. 상기 도 구 는 모두 우수 하지만 숙련 된 도 구 를 사용 하면 충분 합 니 다.효율 성 향상 에 도움 이 됩 니 다. 앞으로 필요 한 것 을 만족 시 키 지 못 할 것 이 있 으 면 다른 것 을 고려 하고 있 습 니 다. C 프로젝트 나 C + 프로젝트 에 서 는 log4c 를 사용 할 수 있 습 니 다. 네, 바로 그것 입 니 다. Log4c 기본 개념 입 니 다.
Log4c 에는 세 가지 중요 한 개념 이 있 습 니 다. Category, Appender, Layout. Category 는 서로 다른 Logger 를 구분 하 는 데 사 용 됩 니 다. 사실은 logger 입 니 다. 한 프로그램 에 서 는 Category 를 통 해 다양한 목적 으로 많은 Logger 를 지정 할 수 있 습 니 다. Appdender 는 흐름 을 설명 하 는 데 사 용 됩 니 다. Category 를 통 해 Appdender 를 지정 합 니 다. log 정 보 를 어디 에 출력 할 지 결정 할 수 있 습 니 다.예 를 들 어 stdout, stderr, 파일, 또는 socket 등 Layout 는 로그 정 보 를 지정 하 는 형식 으로 사 용 됩 니 다. Appender 를 위해 Layout 를 지정 하면 로그 정 보 를 어떤 형식 으로 출력 할 지 결정 할 수 있 습 니 다. 예 를 들 어 시간 스탬프 가 있 는 지, 파일 위치 정보 가 포함 되 어 있 는 지, 로그 정보 에 있 는 출력 형식 이 있 는 지 등 입 니 다. Log4c 는 사용 합 니 다.
log4c 는 다른 Log4j 시스템 도구 와 마찬가지 로 단 도 직 입적 으로 사용 합 니 다.

  
1 //
2   log4c_init();
3   // category
4   log4c_category_t * mycat = log4c_category_get( " mycat " );
5   // category , DEBUG, "Hello World!"
6   log4c_category_log(mycat, LOG4C_PRIORITY_DEBUG, " Hello World! " );

Log4c 는 모든 Log4j 계열 의 log 도구 와 마찬가지 로 파일 을 통 해 log 기능 을 설정 할 수 있 습 니 다. 설정 파일 은 xml 형식 으로 보통 log4crc 라 고 합 니 다. log4crc 를 수정 하면 log4c 를 설정 하 는 목적 을 달성 할 수 있 습 니 다. 상기 코드 세 션 에 대응 하 는 log4crc 는

  
1 <? xml version="1.0" encoding="ISO-8859-1" ?>
2   <! DOCTYPE log4c SYSTEM "" >
3
4   < log4c version ="1.2.1" >
5 < config >
6 < bufsize > 0 </ bufsize >
7 < debug level ="2" />
8 < nocleanup > 0 </ nocleanup >
9 < reread > 1 </ reread >
10 </ config >
11 ....
12 < category name ="mycat" priority ="debug" appender ="stdout" />
13 < appender name ="stdout" type ="stream" layout ="basic" />
14 < layout name ="basic" type ="basic" />
15   </ log4c >

 
log4crc 에서 도 Category, Appender, Layout 세 가지 관 계 를 볼 수 있 습 니 다. 하나의 Category 는 appender 를 지정 해 야 합 니 다. 하나의 appender 도 하나의 layot 를 지정 해 야 합 니 다. Log4c 에 서 는 몇 가지 기본 유형의 appender 와 layot 를 제공 합 니 다. appender 는 자신 이 확장 할 필요 가 없습니다. 저 는 충분 하 다 고 생각 합 니 다. 일반적으로 file, stdout, stderr 등 몇 가지 기본 유형의 appender 와 layot 를 제공 합 니 다.개, 이 몇 가지 종류의 Log4c 가 모두 제공 되 었 습 니 다. layot 확장 이 필요 하 다 고 생각 합 니 다. Log4c 가 제공 하 는 몇 가지 기본 layot 형식 정보 가 풍부 하지 않 아서 가끔 수 요 를 만족 시 키 지 못 할 수도 있 습 니 다. 예 를 들 어 기본 Layout 형식 에 Log 이벤트 의 발생 위 치 를 기록 할 수 있 는 위 치 를 제공 하지 않 았 습 니 다 (예 를 들 어 파일, 줄, 함수).의 형식 입 니 다. 따라서 필요 하 다 면 직접 형식 을 정의 하 는 것 이 좋 습 니 다. 간단 합 니 다. 저 는 자신의 필요 와 취향 에 따라 자신의 형식 을 정의 하 겠 습 니 다. 또한 로그 기록 문 구 를 보 세 요. log4c category log (my cat, LOG4C PRIORITY DEBUG, "Hello World!");  좀 길 지 않 나 요? 매번 이렇게 길 게 한 줄 씩 두 드 리 는 것 은 정말 귀 찮 습 니 다. log4cpp 나 log4cxx 보다 상대 적 으로 짧 습 니 다. 우선 log4c 는 순수한 c 의 것 이기 때문에 대상 을 대상 으로 호출 할 수 없습니다. 그의 log 함수 에 category 를 매개 변수 로 지정 해 야 합 니 다. 그 다음 에 log level 매개 변수 입 니 다. log4c 에서 log level 로 정 의 된 매 거 진 형식 도 충분히 길 습 니 다."LOG4C PRIORITY DEBUG, LOG4C PRIORITY ERROR 등 은 지 는 것 이 귀 찮 습 니 다. 마지막 으로 출력 할 message 입 니 다. 매크로 확장 을 통 해 다른 log4j 시스템 도구 처럼 쉽게 사용 할 수 있 습 니 다. 매크로 확장 을 사용 하 세 요. 매크로 로 Log4c 사용 을 간소화 하 세 요.
로그 의 우선 순위 정 의 를 보면 모두 11 개 입 니 다.

  
1 typedef enum {
2 /* * fatal */ LOG4C_PRIORITY_FATAL = 000 ,
3 /* * alert */ LOG4C_PRIORITY_ALERT = 100 ,
4 /* * crit */ LOG4C_PRIORITY_CRIT = 200 ,
5 /* * error */ LOG4C_PRIORITY_ERROR = 300 ,
6 /* * warn */ LOG4C_PRIORITY_WARN = 400 ,
7 /* * notice */ LOG4C_PRIORITY_NOTICE = 500 ,
8 /* * info */ LOG4C_PRIORITY_INFO = 600 ,
9 /* * debug */ LOG4C_PRIORITY_DEBUG = 700 ,
10 /* * trace */ LOG4C_PRIORITY_TRACE = 800 ,
11 /* * notset */ LOG4C_PRIORITY_NOTSET = 900 ,
12 /* * unknown */ LOG4C_PRIORITY_UNKNOWN = 1000
13 } log4c_priority_level_t;

사실 저 는 그렇게 많은 우선 순 위 를 사용 할 수 없다 고 생각 합 니 다. 차이 가 있 든 없 든 5 개 면 충분 합 니 다. 예 를 들 어 가장 전형 적 인 몇 개 죠? error, warn, info, debug, trace.
 

  
1 /*
2 * logger.h
3 *
4 * Created on:
5 * Author: lijy
6   */
7
8 #ifndef LOGGER_H_
9   #define LOGGER_H_
10
11 #include " log4c.h "
12
13 #define LOG_ERROR(category, msg, args...) \
14 { \
15 const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL);\
16 log4c_category_log_locinfo(mycat, & locinfo, LOG4C_PRIORITY_ERROR, msg, ##args); \
17 }
18
19 #define LOG_WARN(category, msg, args...) \
20 { \
21 const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL);\
22 log4c_category_log_locinfo(mycat, & locinfo, LOG4C_PRIORITY_WARN, msg, ##args); \
23 }
24
25 #define LOG_INFO(category, msg, args...) \
26 { \
27 const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL); \
28 log4c_category_log_locinfo(mycat, & locinfo, LOG4C_PRIORITY_INFO, msg, ##args); \
29 }
30
31 #define LOG_DEBUG(category, msg, args...) \
32 { \
33 const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL); \
34 log4c_category_log_locinfo(mycat, & locinfo, LOG4C_PRIORITY_DEBUG, msg, ##args); \
35 }
36
37 #define LOG_TRACE(category, msg, args...) \
38 { \
39 const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL);\
40 log4c_category_log_locinfo(mycat, & locinfo, LOG4C_PRIORITY_TRACE, msg, ##args); \
41 }
42
43 #endif /* LOGGER_H_ */

 
OK, 현재 도 "Hello World!" 를 출력 합 니 다. 매크로 확장 전후의 차 이 를 비교 해 보 세 요. log4c category log (my cat, LOG4C PRIORITY DEBUG, "Hello World!");     <==>LOG DEBUG (my cat, "Hello World!") 코드 를 적 게 칠 수 있 겠 죠.

좋은 웹페이지 즐겨찾기