@@ -11,6 +11,7 @@ The 'log' library also supports syslog.
1111*/
1212
1313#include <syslog.h>
14+ #include <stdio.h>
1415#include "writeall.h"
1516#include "randommod.h"
1617#include "purge.h"
@@ -24,10 +25,18 @@ static int loglevel = 1;
2425
2526static int logflagfnln = 1 ;
2627static int logflagsyslog = 0 ;
28+ static int logflagkernelfmt = 0 ;
2729
2830static char chars [] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRTSUVWXYZ0123456789" ;
2931
30- void log_init (int level , const char * text , int line , int flagsyslog ) {
32+ static char kfmtbug [5 ] = "____" ;
33+ static char kfmtfatal [5 ] = "____" ;
34+ static char kfmtwarning [5 ] = "____" ;
35+ static char kfmtinfo [5 ] = "____" ;
36+ static char kfmtdebug [5 ] = "____" ;
37+ static char kfmtnotice [5 ] = "____" ;
38+
39+ void log_init (int level , const char * text , int line , int flaglogger ) {
3140
3241 long long i ;
3342
@@ -40,9 +49,20 @@ void log_init(int level, const char *text, int line, int flagsyslog) {
4049 }
4150 logstring [sizeof logstring - 1 ] = 0 ;
4251
43- if (flagsyslog ) {
44- openlog (text , 0 , LOG_DAEMON );
45- logflagsyslog = 1 ;
52+ switch (flaglogger ) {
53+ case 1 :
54+ openlog (text , 0 , LOG_DAEMON );
55+ logflagsyslog = 1 ;
56+ break ;
57+ case 2 :
58+ logflagkernelfmt = 1 ;
59+ snprintf (kfmtbug , sizeof kfmtbug , "<%d>" , LOG_DAEMON |LOG_ALERT );
60+ snprintf (kfmtfatal , sizeof kfmtfatal , "<%d>" , LOG_DAEMON |LOG_EMERG );
61+ snprintf (kfmtwarning , sizeof kfmtwarning , "<%d>" , LOG_DAEMON |LOG_WARNING );
62+ snprintf (kfmtinfo , sizeof kfmtinfo , "<%d>" , LOG_DAEMON |LOG_INFO );
63+ snprintf (kfmtdebug , sizeof kfmtdebug , "<%d>" , LOG_DAEMON |LOG_DEBUG );
64+ snprintf (kfmtnotice , sizeof kfmtnotice , "<%d>" , LOG_DAEMON |LOG_NOTICE );
65+ break ;
4666 }
4767
4868 errno = 0 ;
@@ -115,28 +135,39 @@ void log_9_(
115135
116136 switch (level ) {
117137 case -1 :
118- m = "BUG" ;
138+ m = logflagkernelfmt ? kfmtbug : "BUG" ;
119139 break ;
120140 case 0 :
121141 m = "usage" ;
122142 break ;
123143 case 1 :
124- m = "fatal" ;
144+ m = logflagkernelfmt ? kfmtfatal : "fatal" ;
125145 break ;
126- case 2 :
127- if (!ignoreerrno ) m = "warning" ;
128- else m = "info" ;
146+ case 2 :
147+ if (!ignoreerrno ) m = logflagkernelfmt ? kfmtwarning : "warning" ;
148+ else m = logflagkernelfmt ? kfmtinfo : "info" ;
129149 break ;
130150 case 3 :
131- m = "debug" ;
151+ m = logflagkernelfmt ? kfmtdebug : "debug" ;
132152 break ;
133153 default :
134- m = "unknown" ;
154+ m = logflagkernelfmt ? kfmtnotice : "unknown" ;
135155 break ;
136156 }
137157
138158
139- /* name: session: level: message (error){file:line} */
159+ /*
160+ Default format:
161+ name: session: level: message (error){file:line}
162+ Linux kernel format:
163+ <kern_level>name: session: message (error){file:line}
164+ */
165+
166+ do {
167+ if (level == 0 ) break ; /* don't print in usage level */
168+ if (!logflagkernelfmt ) break ; /* print only in kernelfmt mode */
169+ outs (m );
170+ } while (0 );
140171
141172 /* 'name:' */
142173 do {
@@ -155,6 +186,7 @@ void log_9_(
155186 /* 'level:' */
156187 do {
157188 if (level == 0 ) break ; /* don't print in usage level */
189+ if (logflagkernelfmt ) break ; /* don't print in kernelfmt mode */
158190 outs (m ); outs (": " );
159191 } while (0 );
160192
0 commit comments