1 #define IMAGER_NO_CONTEXT
12 #define DATABUFF DTBUFF+3+10+1+5+1+1
14 #define LOG_DATE_FORMAT "%Y/%m/%d %H:%M:%S"
16 static i_mutex_t log_mutex;
19 im_vloog(pIMCTX, int level, const char *fmt, va_list ap);
26 im_init_log(pIMCTX, const char* name,int level) {
30 log_mutex = i_mutex_new();
33 if (aIMCTX->lg_file) {
35 fclose(aIMCTX->lg_file);
36 aIMCTX->lg_file = NULL;
39 aIMCTX->log_level = level;
41 aIMCTX->lg_file = NULL;
44 aIMCTX->lg_file = stderr;
47 if (NULL == (aIMCTX->lg_file = fopen(name, "w+")) ) {
48 im_push_errorf(aIMCTX, errno, "Cannot open file '%s': (%d)", name, errno);
52 setvbuf(aIMCTX->lg_file, NULL, _IONBF, BUFSIZ);
55 if (aIMCTX->lg_file) {
56 im_log((aIMCTX, 0,"Imager - log started (level = %d)\n", level));
59 return aIMCTX->lg_file != NULL;
63 i_fatal(int exitcode,const char *fmt, ... ) {
67 if (aIMCTX->lg_file != NULL) {
69 im_vloog(aIMCTX, 0, fmt, ap);
76 im_fatal(pIMCTX, int exitcode,const char *fmt, ... ) {
79 if (aIMCTX->lg_file != NULL) {
81 im_vloog(aIMCTX, 0, fmt, ap);
88 =item i_loog(level, format, ...)
91 This is an internal function called by the mm_log() macro.
97 im_vloog(pIMCTX, int level, const char *fmt, va_list ap) {
100 char date_buffer[DTBUFF];
102 if (!aIMCTX || !aIMCTX->lg_file || level > aIMCTX->log_level)
105 i_mutex_lock(log_mutex);
108 str_tm = localtime(&timi);
109 strftime(date_buffer, DTBUFF, LOG_DATE_FORMAT, str_tm);
110 fprintf(aIMCTX->lg_file, "[%s] %10s:%-5d %3d: ", date_buffer,
111 aIMCTX->filename, aIMCTX->line, level);
112 vfprintf(aIMCTX->lg_file, fmt, ap);
113 fflush(aIMCTX->lg_file);
115 i_mutex_unlock(log_mutex);
119 i_loog(int level,const char *fmt, ... ) {
123 if (!aIMCTX || !aIMCTX->lg_file || level > aIMCTX->log_level)
127 im_vloog(aIMCTX, level, fmt, ap);
132 im_loog(pIMCTX, int level,const char *fmt, ... ) {
135 if (!aIMCTX || !aIMCTX->lg_file || level > aIMCTX->log_level)
139 im_vloog(aIMCTX, level, fmt, ap);
144 =item i_lhead(file, line)
147 This is an internal function called by the mm_log() macro.
153 im_lhead(pIMCTX, const char *file, int line) {
154 if (aIMCTX && aIMCTX->lg_file != NULL) {
155 aIMCTX->filename = file;
160 void i_lhead(const char *file, int line) {
163 im_lhead(aIMCTX, file, line);
169 * Logging is inactive - insert dummy functions
172 int im_init_log(pIMCTX, const char* name,int onoff) {
174 i_push_error(0, "Logging disabled");
178 void i_fatal(int exitcode,const char *fmt, ... ) { exit(exitcode); }
179 void im_fatal(pIMCTX, int exitcode,const char *fmt, ... ) { exit(exitcode); }
182 i_loog(int level,const char *fmt, ... ) {
186 im_loog(pIMCTX, int level,const char *fmt, ... ) {
190 i_lhead(const char *file, int line) { }
193 im_lhead(pIMCTX, const char *file, int line) { }