version 1.9, 2025/04/15 02:24:43
|
version 1.11, 2025/04/15 14:56:20
|
Line 24
|
Line 24
|
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* |
* |
* $Log$ |
* $Log$ |
|
* Revision 1.11 2025/04/15 14:56:20 snw |
|
* Fix broken build due to missing declarations |
|
* |
|
* Revision 1.10 2025/04/15 14:39:06 snw |
|
* Further improvements to logging |
|
* |
* Revision 1.9 2025/04/15 02:24:43 snw |
* Revision 1.9 2025/04/15 02:24:43 snw |
* Improve FreeM logging capabilities |
* Improve FreeM logging capabilities |
* |
* |
Line 62
|
Line 68
|
#endif |
#endif |
|
|
#include "mpsdef.h" |
#include "mpsdef.h" |
|
#include "log.h" /* for logging constants */ |
|
#include "init.h" /* for cleanup() */ |
|
|
|
short log_threshold_file; |
|
short log_threshold_syslog; |
|
short log_threshold_stderr; |
|
|
|
|
|
void init_log(void) |
|
{ |
|
log_threshold_file = LOG_INFO; |
|
log_threshold_syslog = LOG_INFO; |
|
log_threshold_stderr = LOG_WARNING; |
|
} |
|
|
|
void log_level_to_text(int level, char *buf) |
|
{ |
|
switch (level) { |
|
|
|
case LOG_DEBUG: |
|
sprintf (buf, "DEBUG"); |
|
break; |
|
|
|
case LOG_INFO: |
|
sprintf (buf, "INFO"); |
|
break; |
|
|
|
case LOG_WARNING: |
|
sprintf (buf, "WARNING"); |
|
break; |
|
|
|
case LOG_ERROR: |
|
sprintf (buf, "ERROR"); |
|
break; |
|
|
|
case LOG_FATAL: |
|
sprintf (buf, "FATAL"); |
|
break; |
|
|
|
default: |
|
sprintf (buf, "LEVEL %d", level); |
|
break; |
|
|
void m_log (int level, const char *msg) |
} |
|
} |
|
|
|
void m_log(int level, const char *msg) |
{ |
{ |
|
|
FILE *fp; |
FILE *fp; |
time_t unix_epoch; |
time_t unix_epoch; |
char timeval[255]; |
char timeval[255]; |
char filename[4096]; |
char filename[4096]; |
|
char lvl[20]; |
struct tm *logtime; |
struct tm *logtime; |
|
|
snprintf (filename, sizeof (filename) - 1, "/var/log/freem/%s.log", shm_env); |
log_level_to_text (level, lvl); |
|
|
if ((fp = fopen (filename, "a+")) != NULL) { |
if (level >= log_threshold_file) { |
unix_epoch = time (0L); |
snprintf (filename, sizeof (filename) - 1, "/var/log/freem/%s.log", shm_env); |
logtime = localtime (&unix_epoch); |
|
strftime (timeval, sizeof (timeval) - 1, "%F %T", logtime); |
if ((fp = fopen (filename, "a+")) != NULL) { |
fprintf (fp, "%s [LEVEL %d PID %ld]: %s\n", timeval, level, pid, msg); |
unix_epoch = time (0L); |
fclose (fp); |
logtime = localtime (&unix_epoch); |
|
strftime (timeval, sizeof (timeval) - 1, "%F %T", logtime); |
|
fprintf (fp, "%s [LEVEL %s PID %ld]: %s\n", timeval, lvl, pid, msg); |
|
fclose (fp); |
|
} |
} |
} |
|
|
#if defined(__linux__) | defined(__FreeBSD__) | defined(__sun__) |
#if defined(__linux__) | defined(__FreeBSD__) | defined(__sun__) |
syslog (level, "%s", msg); |
if (level >= log_threshold_syslog) { |
|
syslog (level, "%s", msg); |
|
} |
#endif |
#endif |
|
|
|
if (level >= log_threshold_stderr) fprintf (stderr, "%s\r\n", msg); |
|
|
|
if (level >= LOG_FATAL) { |
|
cleanup (); |
|
exit (LOG_FATAL); |
|
} |
|
|
return; |
return; |
|
|
} |
} |
|
|
|
|
void logprintf(int level, char *fmt, ...) |
void logprintf(int level, char *fmt, ...) |
{ |
{ |
va_list ptr; |
va_list ptr; |