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