]> git.evergreen-ils.org Git - Evergreen.git/blob - OpenSRF/src/utils/logging.c
moor boogz
[Evergreen.git] / OpenSRF / src / utils / logging.c
1 #include "logging.h"
2
3 void get_timestamp( char buf_36chars[]) {
4
5         struct timeb tb;
6         ftime(&tb);
7         char* localtime = strdup( ctime( &(tb.time) ) );
8         char mil[4];
9         memset(mil,0,4);
10         sprintf(mil," (%d)",tb.millitm);
11         strcpy( buf_36chars, localtime );
12         buf_36chars[ strlen(localtime)-1] = '\0'; // remove newline
13         strcat(buf_36chars,mil);
14         free(localtime);
15 }
16
17 static FILE* log_file = NULL;
18 static int log_level = -1;
19 static int logging = 0;
20
21 void log_free() { if( log_file != NULL ) fclose(log_file ); }
22
23 int fatal_handler( char* msg, ... ) {
24                 
25         char buf[36];
26         memset( buf, 0, 36 );
27         get_timestamp( buf );
28         pid_t  pid = getpid();
29         va_list args;
30
31         if( logging ) {
32
33                 if( log_level < LOG_ERROR )
34                         return -1;
35
36                 fprintf( log_file, "[%s %d] [%s] ", buf, pid, "ERR " );
37         
38                 va_start(args, msg);
39                 vfprintf(log_file, msg, args);
40                 va_end(args);
41         
42                 fprintf(log_file, "\n");
43                 fflush( log_file );
44
45         }
46         
47         /* also log to stderr  for ERRORS*/
48         fprintf( stderr, "[%s %d] [%s] ", buf, pid, "ERR " );
49         va_start(args, msg);
50         vfprintf(stderr, msg, args);
51         va_end(args);
52         fprintf( stderr, "\n" );
53
54         exit(99);
55         return -1; /* for consistency */
56 }
57
58 int warning_handler( char* msg, ... ) {
59
60         char buf[36];
61         memset( buf, 0, 36 );
62         get_timestamp( buf );
63         pid_t  pid = getpid();
64         va_list args;
65         
66         if(logging) {
67
68                 if( log_level < LOG_WARNING )
69                         return -1;
70
71                 fprintf( log_file, "[%s %d] [%s] ", buf, pid, "WARN" );
72         
73                 va_start(args, msg);
74                 vfprintf(log_file, msg, args);
75                 va_end(args);
76         
77                 fprintf(log_file, "\n");
78                 fflush( log_file );
79
80         } else {
81
82                 fprintf( stderr, "[%s %d] [%s] ", buf, pid, "WARN" );
83                 va_start(args, msg);
84                 vfprintf(stderr, msg, args);
85                 va_end(args);
86                 fprintf( stderr, "\n" );
87         }
88
89         return -1;
90 }
91
92 int info_handler( char* msg, ... ) {
93
94         char buf[36];
95         memset( buf, 0, 36 );
96         get_timestamp( buf );
97         pid_t  pid = getpid();
98         va_list args;
99
100         if(logging) {
101
102                 if( log_level < LOG_INFO )
103                         return -1;
104                 fprintf( log_file, "[%s %d] [%s] ", buf, pid, "INFO" );
105
106                 va_start(args, msg);
107                 vfprintf(log_file, msg, args);
108                 va_end(args);
109         
110                 fprintf(log_file, "\n");
111                 fflush( log_file );
112
113         } else {
114
115                 fprintf( stderr, "[%s %d] [%s] ", buf, pid, "INFO" );
116                 va_start(args, msg);
117                 vfprintf(stderr, msg, args);
118                 va_end(args);
119                 fprintf( stderr, "\n" );
120                 fflush(stderr);
121
122         }
123         return -1;
124 }
125
126
127 int debug_handler( char* msg, ... ) {
128
129         char buf[36];
130         memset( buf, 0, 36 );
131         get_timestamp( buf );
132         pid_t  pid = getpid();
133         va_list args;
134         
135         if(logging) {
136
137                 if( log_level < LOG_DEBUG )
138                         return -1;
139
140                 fprintf( log_file, "[%s %d] [%s] ", buf, pid, "DEBG" );
141         
142                 va_start(args, msg);
143                 vfprintf(log_file, msg, args);
144                 va_end(args);
145         
146                 fprintf(log_file, "\n");
147                 fflush( log_file );
148
149         } else {
150
151                 fprintf( stderr, "[%s %d] [%s] ", buf, pid, "DEBG" );
152                 va_start(args, msg);
153                 vfprintf(stderr, msg, args);
154                 va_end(args);
155                 fprintf( stderr, "\n" );
156         }
157
158         return -1;
159 }
160
161
162 int log_init( int llevel, char* lfile ) {
163
164
165         if( llevel < 1 ) {
166                 logging = 0;
167                 return 0;
168         }
169
170         log_level = llevel;
171
172         /* log to stderr */
173         if(lfile == NULL) return 0;
174
175         log_file = fopen( lfile, "a" );
176         if( log_file == NULL ) {
177                 fprintf( stderr, "Unable to open log file %s for appending\n", lfile );
178                 return 0;
179         }
180         logging = 1;
181         return 1;
182
183 }
184
185