1+ /*
2+ M_log.h : a simple logger
3+
4+ 5+ 2014/02/20
6+ */
7+
8+ #include "../MBase_priv.h"
9+ #include "MBase.h"
10+ #include <assert.h>
11+ #include <stdarg.h>
12+
13+ static INLINE M_sint32 init_log_f (M_log * self , const M_sint8 * log_file , M_sint32 log_level )
14+ {
15+ //strcpy(self->log_file, log_file);
16+ if ( !(self -> fp = fopen (log_file , "a+" )) )
17+ return -1 ;
18+ self -> log_level = log_level ;
19+
20+ return 0 ;
21+
22+ }
23+ static INLINE void set_log_level_f (M_log * self , M_sint32 log_level )
24+ {
25+ self -> log_level = log_level ;
26+ }
27+
28+ static char * str_log_level [LOG_DETAIL + 1 ] = {"LOG_FATAL" , "LOG_ERROR" , "LOG_WARNING" , "LOG_INFO" , "LOG_DETAIL" };
29+
30+ static INLINE M_sint32 dump_log_f (M_log * self , M_sint32 log_level , const M_sint8 * fmt , ...)
31+ {
32+ M_sint32 written_bytes = 0 ;
33+ if (self -> log_level <= log_level )
34+ {
35+ va_list arg_ptr ;
36+ va_start (arg_ptr ,fmt ); //以固定参数的地址为起点确定变参的内存起始地址。
37+ written_bytes = vfprintf (self -> fp , fmt , arg_ptr );
38+ va_end (arg_ptr );
39+ }
40+ return written_bytes ;
41+ }
42+ static INLINE void close_log_f (M_log * self )
43+ {
44+ fclose (self -> fp );
45+ }
46+
47+ INLINE void M_log_construct (M_log * obj )
48+ {
49+ obj -> init = (M_sint32 (* )(M_self * , const M_sint8 * , M_sint32 ))init_log_f ;
50+ obj -> set_log_level = (void (* )(M_self * , M_sint32 ))set_log_level_f ;
51+ obj -> dump_log = (M_sint32 (* )(M_self * , M_sint32 , const M_sint8 * , ...))dump_log_f ;
52+ obj -> close_log = (void (* )(M_self * ))close_log_f ;
53+
54+ //obj->log_file[0] = 0;
55+ obj -> fp = NULL ;
56+ obj -> log_level = LOG_INFO ;
57+ }
0 commit comments