1 #define IMAGER_NO_CONTEXT
12 #define DATABUFF DTBUFF+3+10+1+5+1+1
15 static int log_level = 0;
16 static FILE *lg_file = NULL;
17 static char date_buffer[DTBUFF];
18 static char data_buffer[DATABUFF];
21 #define LOG_DATE_FORMAT "%Y/%m/%d %H:%M:%S"
24 im_vloog(pIMCTX, int level, const char *fmt, va_list ap);
31 im_init_log(pIMCTX, const char* name,int level) {
34 if (aIMCTX->lg_file) {
36 fclose(aIMCTX->lg_file);
37 aIMCTX->lg_file = NULL;
40 aIMCTX->log_level = level;
42 aIMCTX->lg_file = NULL;
45 aIMCTX->lg_file = stderr;
48 if (NULL == (aIMCTX->lg_file = fopen(name, "w+")) ) {
49 im_push_errorf(aIMCTX, errno, "Cannot open file '%s': (%d)", name, errno);
53 setvbuf(aIMCTX->lg_file, NULL, _IONBF, BUFSIZ);
56 if (aIMCTX->lg_file) {
57 im_log((aIMCTX, 0,"Imager - log started (level = %d)\n", level));
60 return aIMCTX->lg_file != NULL;
64 i_fatal(int exitcode,const char *fmt, ... ) {
68 if (aIMCTX->lg_file != NULL) {
70 im_vloog(aIMCTX, 0, fmt, ap);
77 im_fatal(pIMCTX, int exitcode,const char *fmt, ... ) {
80 if (aIMCTX->lg_file != NULL) {
82 im_vloog(aIMCTX, 0, fmt, ap);
89 =item i_loog(level, format, ...)
92 This is an internal function called by the mm_log() macro.
98 im_vloog(pIMCTX, int level, const char *fmt, va_list ap) {
101 char date_buffer[DTBUFF];
103 if (!aIMCTX->lg_file || level > aIMCTX->log_level)
107 str_tm = localtime(&timi);
108 strftime(date_buffer, DTBUFF, LOG_DATE_FORMAT, str_tm);
109 fprintf(aIMCTX->lg_file, "[%s] %10s:%-5d %3d: ", date_buffer,
110 aIMCTX->filename, aIMCTX->line, level);
111 vfprintf(aIMCTX->lg_file, fmt, ap);
112 fflush(aIMCTX->lg_file);
116 i_loog(int level,const char *fmt, ... ) {
120 if (!aIMCTX->lg_file || level > aIMCTX->log_level)
124 im_vloog(aIMCTX, level, fmt, ap);
129 im_loog(pIMCTX, int level,const char *fmt, ... ) {
132 if (!aIMCTX->lg_file || level > aIMCTX->log_level)
136 im_vloog(aIMCTX, level, fmt, ap);
141 =item i_lhead(file, line)
144 This is an internal function called by the mm_log() macro.
150 im_lhead(pIMCTX, const char *file, int line) {
151 if (aIMCTX->lg_file != NULL) {
152 aIMCTX->filename = file;
157 void i_lhead(const char *file, int line) {
160 im_lhead(aIMCTX, file, line);
166 * Logging is inactive - insert dummy functions
169 int im_init_log(pIMCTX, const char* name,int onoff) {
171 i_push_error(0, "Logging disabled");
175 void i_fatal(int exitcode,const char *fmt, ... ) { exit(exitcode); }
176 void im_fatal(pIMCTX, int exitcode,const char *fmt, ... ) { exit(exitcode); }
179 i_loog(int level,const char *fmt, ... ) {
183 im_loog(pIMCTX, int level,const char *fmt, ... ) {
187 i_lhead(const char *file, int line) { }
190 im_lhead(pIMCTX, const char *file, int line) { }