source: libcf/trunk/include/cf_log.h@ 34

Last change on this file since 34 was 34, checked in by cheese, 11 years ago

#1 add example code for doxygen

File size: 6.1 KB
Line 
1/**
2 * @file cf_log.h
3 * @author myusgun <myusgun@gmail.com>
4 * @version 0.1
5 *
6 * @section 샘플코드
7 * @code
8
9#include "cf_log.h"
10
11CF_Log_Ctx gLogCtx;
12
13void main (const char * message)
14{
15 int i, j;
16 char logname[16] = {0x00,};
17
18 CF_DEBUG_CALLSTACK_PUSH (gDebugCtx);
19
20 CF_Log_Initialize (10);
21
22 // with context
23 gLogCtx = CF_Log_CreateCtx (file, CF_LOG_BUFFER_DEFAULT);
24 if (gLogCtx == NULL)
25 CF_DEBUG_PRINT (stderr, "create log ctx error\n");
26
27 for (i = 0 ; i < 10000 ; i++)
28 CF_Log_Write (gLogCtx, "LOG_TEST", "turn %d\n", i);
29
30 CF_DEBUG_CALLSTACK_POP (gDebugCtx, &gDebugCallstack);
31
32 CF_Log_Write (gLogCtx, message,
33 "here is the end of function [file:%s line:%d func:%s]\n",
34 gDebugCallstack.file,
35 gDebugCallstack.line,
36 gDebugCallstack.function);
37
38 CF_Log_DestroyCtx (gLogCtx);
39
40 // with id number
41 for (i = 0 ; i < 10 ; i++)
42 {
43 sprintf (logname, "logid%d.txt", i);
44 CF_LOG_OPEN (i, logname, CF_LOG_BUFFER_NO);
45 }
46
47 for (i = 0 ; i < 10 ; i++)
48 {
49 for (j = 0 ; j < 10000 ; j++)
50 CF_LOG_WRITE (i, "LOG_ID_TEST", "turn %d\n", j);
51
52 CF_LOG_CLOSE (i);
53 }
54
55 CF_Log_Finalize ();
56}
57
58 * @endcode
59 */
60#ifndef __CF_LOG_H__
61#define __CF_LOG_H__
62
63#include "cf_base.h"
64
65#define CF_ERROR_LOG_INITIALIZE CF_ERROR_LOG - 1
66#define CF_ERROR_LOG_INVALID_CTX CF_ERROR_LOG - 2
67#define CF_ERROR_LOG_SET_MULTITHREAD CF_ERROR_LOG - 3
68#define CF_ERROR_LOG_UNSET_MULTITHREAD CF_ERROR_LOG - 4
69#define CF_ERROR_LOG_LOCK_CTX CF_ERROR_LOG - 5
70#define CF_ERROR_LOG_UNLOCK_CTX CF_ERROR_LOG - 6
71#define CF_ERROR_LOG_FLUSH CF_ERROR_LOG - 7
72#define CF_ERROR_LOG_INVALID_MAPID CF_ERROR_LOG - 8
73#define CF_ERROR_LOG_NOT_MAPPED_ID CF_ERROR_LOG - 9
74#define CF_ERROR_LOG_ALREADY_MAPPED_ID CF_ERROR_LOG - 10
75#define CF_ERROR_LOG_NOT_INITIALIZE CF_ERROR_LOG - 11
76
77/**
78 * 로그의 버퍼 크기를 기본 값으로 설정
79 *
80 * @see CF_Log_CreateCtx, CF_LOG_OPEN
81 */
82#define CF_LOG_BUFFER_DEFAULT -1
83
84/** 로그 기록 시 버퍼를 사용하지 않고 즉시 기록
85 *
86 * @see CF_Log_CreateCtx, CF_LOG_OPEN, CF_Log_Initialize
87 */
88#define CF_LOG_BUFFER_NO 0
89
90/**
91 * 로그에 아이디 넘버를 부여하여 생성 <br />
92 * 로그 기록 시, 아이디 넘버를 사용하면 해당 로그로 기록할 수 있음
93 *
94 * @param __id 부여할 아이디 넘버
95 * @param __file 로그 파일 경로
96 * @param __memsize 로그 버퍼 크기
97 *
98 * @see CF_Log_MapCtxID
99 */
100#define CF_LOG_OPEN(__id,__file,__memsize) \
101 CF_Log_MapCtxID (__id, CF_Log_CreateCtx (__file, __memsize))
102
103/**
104 * 아이디 넘버에 해당하는 로그에 쓰기
105 *
106 * @param __id 로그의 아이디 넘버
107 * @param __pf 로그의 프리픽스 문자열
108 * @param __fmt 포맷 스트링
109 * @param ... 가변 인자
110 *
111 * @see CF_Log_GetMappedCtx
112 */
113#define CF_LOG_WRITE(__id,__pf,__fmt,...) \
114 CF_Log_Write (CF_Log_GetMappedCtx (__id),__pf,__fmt,##__VA_ARGS__)
115
116/**
117 * 아이디 넘버에 해당하는 로그를 닫고 해제
118 *
119 * @param __id 로그의 아이디 넘버
120 *
121 * @see CF_Log_UnmapCtxID
122 */
123#define CF_LOG_CLOSE(__id) CF_Log_UnmapCtxID (__id)
124
125/** 로그 컨텍스트 */
126typedef void * CF_Log_Ctx;
127
128#ifdef __cplusplus
129extern "C" {
130#endif
131
132/**
133 * 로그를 사용하기 위해 초기화
134 *
135 * @return 성공 시, CF_OK; 실패 시, 오류 코드
136 *
137 * @param logPool 아이디 넘버 최대 값
138 */
139CF_EXPORT int
140CF_Log_Initialize (const int logPool);
141
142/**
143 * 로그가 모두 사용된 후 자원 해제
144 *
145 * @return CF_OK 반환
146 */
147CF_EXPORT int
148CF_Log_Finalize (void);
149
150/**
151 * 로그 컨텍스트 생성
152 *
153 * @return 성공 시, 로그 컨텍스트; 실패 시, NULL
154 *
155 * @param path 로그 파일 경로
156 * @param memsize 로그 버퍼 크기
157 *
158 * @see CF_LOG_BUFFER_DEFAULT, CF_LOG_BUFFER_NO
159 */
160CF_EXPORT CF_Log_Ctx
161CF_Log_CreateCtx (const char * path,
162 const int memsize);
163
164/**
165 * 로그 컨텍스트 해제
166 *
167 * @return 성공 시, CF_OK; 실패 시, 오류 코드
168 *
169 * @param ctx 로그 컨텍스트
170 */
171CF_EXPORT int
172CF_Log_DestroyCtx (CF_Log_Ctx ctx);
173
174/**
175 * 로그 컨텍스트에 멀티쓰레드 모드 설정
176 *
177 * @return 성공 시, CF_OK; 실패 시, 오류 코드
178 *
179 * @param ctx 로그 컨텍스트
180 */
181CF_EXPORT int
182CF_Log_SetMultiThread (CF_Log_Ctx ctx);
183
184/**
185 * 로그 컨텍스트에 멀티쓰레드 모드 설정 해제
186 *
187 * @return 성공 시, CF_OK; 실패 시, 오류 코드
188 *
189 * @param ctx 로그 컨텍스트
190 */
191CF_EXPORT int
192CF_Log_UnsetMultiThread (CF_Log_Ctx ctx);
193
194/**
195 * 로그 컨텍스트에 따라 로그 쓰기
196 *
197 * @return 성공 시, CF_OK; 실패 시, 오류 코드
198 *
199 * @param ctx 로그 컨텍스트
200 * @param prefix 로그의 프리픽스 문자열
201 * @param fmt 포맷 스트링
202 * @param ... 가변 인자
203 */
204CF_EXPORT int
205CF_Log_Write (CF_Log_Ctx ctx,
206 const char * prefix,
207 const char * fmt, ...);
208
209/**
210 * 로그 버퍼의 데이터를 즉시 로그 파일에 쓰기
211 *
212 * @return 성공 시, CF_OK; 실패 시, 오류 코드
213 *
214 * @param ctx 로그 컨텍스트
215 */
216CF_EXPORT int
217CF_Log_Flush (CF_Log_Ctx ctx);
218
219/**
220 * 로그 컨텍스트에 아이디 넘버 할당<br />
221 * 로그 기록 시, 아이디 넘버를 사용하면 해당 로그로 기록할 수 있음
222 *
223 * @return 성공 시, CF_OK; 실패 시, 오류 코드
224 *
225 * @param mapid 부여할 아이디 넘버
226 * @param ctx 로그 컨텍스트
227 *
228 * @remark 반드시 먼저 초기화 해야하며, 초기화 시에 주어진 번호보다 작은 아이디 넘버를 사용해야 함
229 *
230 * @see CF_LOG_OPEN, CF_Log_CreateCtx
231 */
232CF_EXPORT int
233CF_Log_MapCtxID (const int mapid,
234 const CF_Log_Ctx ctx);
235
236/**
237 * 아이디 넘버에 해당하는 로그를 닫고 해당하는 컨텍스트를 해제
238 *
239 * @return 성공 시, CF_OK; 실패 시, 오류 코드
240 *
241 * @param mapid 로그의 아이디 넘버
242 *
243 * @remark 아이디 넘버에 해당하는 컨텍스트가 해제되므로 주의
244 *
245 * @see CF_LOG_CLOSE, CF_Log_DestroyCtx
246 */
247CF_EXPORT int
248CF_Log_UnmapCtxID (const int mapid);
249
250/**
251 * 아이디 넘버에 해당하는 로그 컨텍스트를 얻기
252 *
253 * @return 성공 시, 로그 컨텍스트; 실패 시, NULL
254 *
255 * @param mapid 로그의 아이디 넘버
256 */
257CF_EXPORT CF_Log_Ctx
258CF_Log_GetMappedCtx (const int mapid);
259
260#ifdef __cplusplus
261}
262#endif
263
264#endif // #ifndef __CF_LOG_H__
Note: See TracBrowser for help on using the repository browser.