11c606a6 (kx 2023-04-11 01:18:34 +0300 1)
11c606a6 (kx 2023-04-11 01:18:34 +0300 2) /**********************************************************************
11c606a6 (kx 2023-04-11 01:18:34 +0300 3)
11c606a6 (kx 2023-04-11 01:18:34 +0300 4) Copyright 2019 Andrey V.Kosteltsev
11c606a6 (kx 2023-04-11 01:18:34 +0300 5)
11c606a6 (kx 2023-04-11 01:18:34 +0300 6) Licensed under the Radix.pro License, Version 1.0 (the "License");
11c606a6 (kx 2023-04-11 01:18:34 +0300 7) you may not use this file except in compliance with the License.
11c606a6 (kx 2023-04-11 01:18:34 +0300 8) You may obtain a copy of the License at
11c606a6 (kx 2023-04-11 01:18:34 +0300 9)
11c606a6 (kx 2023-04-11 01:18:34 +0300 10) https://radix.pro/licenses/LICENSE-1.0-en_US.txt
11c606a6 (kx 2023-04-11 01:18:34 +0300 11)
11c606a6 (kx 2023-04-11 01:18:34 +0300 12) Unless required by applicable law or agreed to in writing, software
11c606a6 (kx 2023-04-11 01:18:34 +0300 13) distributed under the License is distributed on an "AS IS" BASIS,
11c606a6 (kx 2023-04-11 01:18:34 +0300 14) WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
11c606a6 (kx 2023-04-11 01:18:34 +0300 15) implied.
11c606a6 (kx 2023-04-11 01:18:34 +0300 16)
11c606a6 (kx 2023-04-11 01:18:34 +0300 17) **********************************************************************/
11c606a6 (kx 2023-04-11 01:18:34 +0300 18)
11c606a6 (kx 2023-04-11 01:18:34 +0300 19) #include <config.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300 20)
11c606a6 (kx 2023-04-11 01:18:34 +0300 21) #include <stdlib.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300 22) #include <stdio.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300 23) #include <stdarg.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300 24) #include <unistd.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300 25) #include <time.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300 26) #include <sys/time.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300 27)
11c606a6 (kx 2023-04-11 01:18:34 +0300 28) #include <msglog.h>
11c606a6 (kx 2023-04-11 01:18:34 +0300 29)
11c606a6 (kx 2023-04-11 01:18:34 +0300 30) FILE *errlog;
11c606a6 (kx 2023-04-11 01:18:34 +0300 31)
11c606a6 (kx 2023-04-11 01:18:34 +0300 32) void (*fatal_error_hook)( void );
11c606a6 (kx 2023-04-11 01:18:34 +0300 33)
11c606a6 (kx 2023-04-11 01:18:34 +0300 34) void logmsg( FILE *logfile, enum _msg_type type, char *format, ... )
11c606a6 (kx 2023-04-11 01:18:34 +0300 35) {
11c606a6 (kx 2023-04-11 01:18:34 +0300 36) va_list argp;
11c606a6 (kx 2023-04-11 01:18:34 +0300 37)
11c606a6 (kx 2023-04-11 01:18:34 +0300 38) if( ! format ) return;
11c606a6 (kx 2023-04-11 01:18:34 +0300 39)
11c606a6 (kx 2023-04-11 01:18:34 +0300 40) switch( type )
11c606a6 (kx 2023-04-11 01:18:34 +0300 41) {
11c606a6 (kx 2023-04-11 01:18:34 +0300 42) case MSG_FATAL: fprintf( logfile, "%s: FATAL: ", program ); break;
11c606a6 (kx 2023-04-11 01:18:34 +0300 43) case MSG_ERROR: fprintf( logfile, "%s: ERROR: ", program ); break;
11c606a6 (kx 2023-04-11 01:18:34 +0300 44) case MSG_WARNING: fprintf( logfile, "%s: WARNING: ", program ); break;
11c606a6 (kx 2023-04-11 01:18:34 +0300 45) case MSG_NOTICE: fprintf( logfile, "%s: NOTE: ", program ); break;
11c606a6 (kx 2023-04-11 01:18:34 +0300 46) case MSG_INFO: fprintf( logfile, "%s: INFO: ", program ); break;
11c606a6 (kx 2023-04-11 01:18:34 +0300 47) case MSG_DEBUG: fprintf( logfile, "%s: DEBUG: ", program ); break;
11c606a6 (kx 2023-04-11 01:18:34 +0300 48) case MSG_LOG:
11c606a6 (kx 2023-04-11 01:18:34 +0300 49) {
11c606a6 (kx 2023-04-11 01:18:34 +0300 50) time_t t = time( NULL );
11c606a6 (kx 2023-04-11 01:18:34 +0300 51) struct tm tm = *localtime(&t);
11c606a6 (kx 2023-04-11 01:18:34 +0300 52)
11c606a6 (kx 2023-04-11 01:18:34 +0300 53) fprintf( logfile, "[%04d-%02d-%02d %02d:%02d:%02d]: %s: ",
11c606a6 (kx 2023-04-11 01:18:34 +0300 54) tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
11c606a6 (kx 2023-04-11 01:18:34 +0300 55) tm.tm_hour, tm.tm_min, tm.tm_sec,
11c606a6 (kx 2023-04-11 01:18:34 +0300 56) program );
11c606a6 (kx 2023-04-11 01:18:34 +0300 57) break;
11c606a6 (kx 2023-04-11 01:18:34 +0300 58) }
11c606a6 (kx 2023-04-11 01:18:34 +0300 59) default:
11c606a6 (kx 2023-04-11 01:18:34 +0300 60) fprintf( logfile, "%s: ", program );
11c606a6 (kx 2023-04-11 01:18:34 +0300 61) break;
11c606a6 (kx 2023-04-11 01:18:34 +0300 62) }
11c606a6 (kx 2023-04-11 01:18:34 +0300 63) va_start( argp, format );
11c606a6 (kx 2023-04-11 01:18:34 +0300 64) vfprintf( errlog, format, argp );
11c606a6 (kx 2023-04-11 01:18:34 +0300 65) fprintf( errlog, "\n" );
11c606a6 (kx 2023-04-11 01:18:34 +0300 66) fflush( errlog );
11c606a6 (kx 2023-04-11 01:18:34 +0300 67) }