--- freem/src/log.c 2025/04/15 14:39:06 1.10
+++ freem/src/log.c 2025/04/15 16:49:36 1.12
@@ -1,5 +1,5 @@
/*
- * $Id: log.c,v 1.10 2025/04/15 14:39:06 snw Exp $
+ * $Id: log.c,v 1.12 2025/04/15 16:49:36 snw Exp $
* freem error logging
*
*
@@ -24,6 +24,12 @@
* along with FreeM. If not, see .
*
* $Log: log.c,v $
+ * Revision 1.12 2025/04/15 16:49:36 snw
+ * Make use of logprintf throughout codebase
+ *
+ * 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
*
@@ -57,6 +63,7 @@
#endif
#include
#include
+#include
#if defined(USE_SYS_TIME_H) && !defined(MSDOS) && !defined(__osf__)
# include
@@ -65,6 +72,9 @@
#endif
#include "mpsdef.h"
+#include "log.h" /* for logging constants */
+#include "init.h" /* for cleanup() */
+#include "iniconf.h" /* for read_profile_string() */
short log_threshold_file;
short log_threshold_syslog;
@@ -73,32 +83,169 @@ short log_threshold_stderr;
void init_log(void)
{
- log_threshold_file = LOG_INFO;
- log_threshold_syslog = LOG_INFO;
- log_threshold_stderr = LOG_WARNING;
+ char buf[4096];
+ char *env_value;
+
+ if (read_profile_string (env_config_file, shm_env, "log_threshold_file", buf) == TRUE) {
+ if (strcmp (buf, "debug") == 0) {
+ log_threshold_file = FM_LOG_DEBUG;
+ }
+ else if (strcmp (buf, "info") == 0) {
+ log_threshold_file = FM_LOG_INFO;
+ }
+ else if (strcmp (buf, "warning") == 0) {
+ log_threshold_file = FM_LOG_WARNING;
+ }
+ else if (strcmp (buf, "error") == 0) {
+ log_threshold_file = FM_LOG_ERROR;
+ }
+ else if (strcmp (buf, "fatal") == 0) {
+ log_threshold_file = FM_LOG_FATAL;
+ }
+ else {
+ log_threshold_file = FM_LOG_INFO;
+ }
+ }
+ else {
+ log_threshold_file = FM_LOG_INFO;
+ }
+
+ if (read_profile_string (env_config_file, shm_env, "log_threshold_syslog", buf) == TRUE) {
+ if (strcmp (buf, "debug") == 0) {
+ log_threshold_syslog = FM_LOG_DEBUG;
+ }
+ else if (strcmp (buf, "info") == 0) {
+ log_threshold_syslog = FM_LOG_INFO;
+ }
+ else if (strcmp (buf, "warning") == 0) {
+ log_threshold_syslog = FM_LOG_WARNING;
+ }
+ else if (strcmp (buf, "error") == 0) {
+ log_threshold_syslog = FM_LOG_ERROR;
+ }
+ else if (strcmp (buf, "fatal") == 0) {
+ log_threshold_syslog = FM_LOG_FATAL;
+ }
+ else {
+ log_threshold_syslog = FM_LOG_INFO;
+ }
+ }
+ else {
+ log_threshold_syslog = FM_LOG_INFO;
+ }
+
+ if (read_profile_string (env_config_file, shm_env, "log_threshold_stderr", buf) == TRUE) {
+ if (strcmp (buf, "debug") == 0) {
+ log_threshold_stderr = FM_LOG_DEBUG;
+ }
+ else if (strcmp (buf, "info") == 0) {
+ log_threshold_stderr = FM_LOG_INFO;
+ }
+ else if (strcmp (buf, "warning") == 0) {
+ log_threshold_stderr = FM_LOG_WARNING;
+ }
+ else if (strcmp (buf, "error") == 0) {
+ log_threshold_stderr = FM_LOG_ERROR;
+ }
+ else if (strcmp (buf, "fatal") == 0) {
+ log_threshold_stderr = FM_LOG_FATAL;
+ }
+ else {
+ log_threshold_stderr = FM_LOG_INFO;
+ }
+ }
+ else {
+ log_threshold_stderr = FM_LOG_WARNING;
+ }
+
+ if ((env_value = getenv ("FREEM_LOG_THRESHOLD_FILE")) != NULL) {
+ if (strcmp (env_value, "debug") == 0) {
+ log_threshold_file = FM_LOG_DEBUG;
+ }
+ else if (strcmp (env_value, "info") == 0) {
+ log_threshold_file = FM_LOG_INFO;
+ }
+ else if (strcmp (env_value, "warning") == 0) {
+ log_threshold_file = FM_LOG_WARNING;
+ }
+ else if (strcmp (env_value, "error") == 0) {
+ log_threshold_file = FM_LOG_ERROR;
+ }
+ else if (strcmp (env_value, "fatal") == 0) {
+ log_threshold_file = FM_LOG_FATAL;
+ }
+ else {
+ log_threshold_file = FM_LOG_INFO;
+ }
+ }
+
+ if ((env_value = getenv ("FREEM_LOG_THRESHOLD_SYSLOG")) != NULL) {
+ if (strcmp (env_value, "debug") == 0) {
+ log_threshold_syslog = FM_LOG_DEBUG;
+ }
+ else if (strcmp (env_value, "info") == 0) {
+ log_threshold_syslog = FM_LOG_INFO;
+ }
+ else if (strcmp (env_value, "warning") == 0) {
+ log_threshold_syslog = FM_LOG_WARNING;
+ }
+ else if (strcmp (env_value, "error") == 0) {
+ log_threshold_syslog = FM_LOG_ERROR;
+ }
+ else if (strcmp (env_value, "fatal") == 0) {
+ log_threshold_syslog = FM_LOG_FATAL;
+ }
+ else {
+ log_threshold_syslog = FM_LOG_INFO;
+ }
+ }
+
+ if ((env_value = getenv ("FREEM_LOG_THRESHOLD_STDERR")) != NULL) {
+ if (strcmp (env_value, "debug") == 0) {
+ log_threshold_stderr = FM_LOG_DEBUG;
+ }
+ else if (strcmp (env_value, "info") == 0) {
+ log_threshold_stderr = FM_LOG_INFO;
+ }
+ else if (strcmp (env_value, "warning") == 0) {
+ log_threshold_stderr = FM_LOG_WARNING;
+ }
+ else if (strcmp (env_value, "error") == 0) {
+ log_threshold_stderr = FM_LOG_ERROR;
+ }
+ else if (strcmp (env_value, "fatal") == 0) {
+ log_threshold_stderr = FM_LOG_FATAL;
+ }
+ else {
+ log_threshold_stderr = FM_LOG_INFO;
+ }
+ }
+
+
+
}
void log_level_to_text(int level, char *buf)
{
switch (level) {
- case LOG_DEBUG:
+ case FM_LOG_DEBUG:
sprintf (buf, "DEBUG");
break;
- case LOG_INFO:
+ case FM_LOG_INFO:
sprintf (buf, "INFO");
break;
- case LOG_WARNING:
+ case FM_LOG_WARNING:
sprintf (buf, "WARNING");
break;
- case LOG_ERROR:
+ case FM_LOG_ERROR:
sprintf (buf, "ERROR");
break;
- case LOG_FATAL:
+ case FM_LOG_FATAL:
sprintf (buf, "FATAL");
break;
@@ -128,7 +275,7 @@ void m_log(int level, const char *msg)
unix_epoch = time (0L);
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);
+ fprintf (fp, "%s [LEVEL %s PID %ld]: %s\n", timeval, lvl, getpid (), msg);
fclose (fp);
}
}
@@ -139,11 +286,11 @@ void m_log(int level, const char *msg)
}
#endif
- if (level >= log_threshold_stderr) fprintf (stderr, "%s\r\n", msg);
+ if (level >= log_threshold_stderr) fprintf (stderr, "%s [%s]\r\n", msg, lvl);
- if (level >= LOG_FATAL) {
+ if (level >= FM_LOG_FATAL) {
cleanup ();
- exit (LOG_FATAL);
+ exit (FM_LOG_FATAL);
}
return;
@@ -163,9 +310,13 @@ void logprintf(int level, char *fmt, ...
register int i;
+ logmsg[0] = '\0';
+
for (i = 0; fmt[i] != '\0'; i++) {
ch = fmt[i];
+ tmps[0] = '\0';
+
switch (ch) {
case '%':
@@ -175,28 +326,33 @@ void logprintf(int level, char *fmt, ...
case '%': /* literal percent sign */
strcat (logmsg, "%");
- break;
+ continue;
case 'c': /* char */
sprintf (tmps, "%c", va_arg (ptr, int));
strcat (logmsg, tmps);
- break;
+ continue;
case 's': /* C string */
strcat (logmsg, va_arg (ptr, char *));
- break;
+ continue;
case 'S': /* FreeM string */
stcpy (tmps, va_arg (ptr, char *));
stcnv_m2c (tmps);
strcat (logmsg, tmps);
- break;
+ continue;
case 'd': /* int */
sprintf (tmps, "%d", va_arg (ptr, int));
strcat (logmsg, tmps);
- break;
+ continue;
+ case 'p': /* pointer */
+ sprintf (tmps, "%p", va_arg (ptr, void *));
+ strcat (logmsg, tmps);
+ continue;
+
case 'l': /* long... */
subtyp = fmt[++i];
switch (subtyp) {
@@ -204,15 +360,15 @@ void logprintf(int level, char *fmt, ...
case 'd': /* long int */
sprintf (tmps, "%ld", va_arg (ptr, long));
strcat (logmsg, tmps);
- break;
+ continue;
case 'f': /* float */
sprintf (tmps, "%lf", va_arg (ptr, double));
strcat (logmsg, tmps);
- break;
+ continue;
}
- break;
+ continue;
}
case '\\':
@@ -221,22 +377,22 @@ void logprintf(int level, char *fmt, ...
case 'n':
sprintf (tmps, "\n");
strcat (logmsg, tmps);
- break;
+ continue;
case 'r':
sprintf (tmps, "\r");
strcat (logmsg, tmps);
- break;
+ continue;
case 't':
sprintf (tmps, "\t");
strcat (logmsg, tmps);
- break;
+ continue;
case '\\':
sprintf (tmps, "\\");
strcat (logmsg, tmps);
- break;
+ continue;
}
default: