Log4c 사용
24520 단어 log
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!") 코드 를 적 게 칠 수 있 겠 죠.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
console.log()에서 컨텍스트를 유지하는 간단한 방법This post explains a simple way to enhance the use of console.log() in a nodejs http server, with an example for SvelteK...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.