Diff for /freem/src/log.c between versions 1.9 and 1.11

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;

Removed from v.1.9  
changed lines
  Added in v.1.11


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>