]> arthur.barton.de Git - ngircd-alex.git/blob - src/ngircd/log.c
c28023db1478c9833b96aafac8bd3c9f9f67fc72
[ngircd-alex.git] / src / ngircd / log.c
1 /*
2  * ngIRCd -- The Next Generation IRC Daemon
3  * Copyright (c)2001 by Alexander Barton (alex@barton.de)
4  *
5  * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
6  * der GNU General Public License (GPL), wie von der Free Software Foundation
7  * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
8  * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
9  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
10  * der an comBase beteiligten Autoren finden Sie in der Datei AUTHORS.
11  *
12  * $Id: log.c,v 1.12 2001/12/29 20:16:31 alex Exp $
13  *
14  * log.c: Logging-Funktionen
15  *
16  * $Log: log.c,v $
17  * Revision 1.12  2001/12/29 20:16:31  alex
18  * - Log-Funktionen fuer Resolver-Sub-Prozess implementiert.
19  *
20  * Revision 1.11  2001/12/29 03:08:49  alex
21  * - neue configure-Option "--enable-strict-rfc".
22  *
23  * Revision 1.10  2001/12/27 01:44:49  alex
24  * - die Verwendung von syslog kann nun abgeschaltet werden.
25  *
26  * Revision 1.9  2001/12/26 03:22:16  alex
27  * - string.h wird nun includiert.
28  *
29  * Revision 1.8  2001/12/25 23:13:00  alex
30  * - Versionsstring bei Programmstart verbessert.
31  *
32  * Revision 1.7  2001/12/25 22:04:26  alex
33  * - Aenderungen an den Debug- und Logging-Funktionen.
34  *
35  * Revision 1.6  2001/12/25 19:20:39  alex
36  * - es wird nun die Facility LOG_LOCAL5 zum Loggen verwendet.
37  *
38  * Revision 1.5  2001/12/15 00:07:56  alex
39  * - Log-Level der Start- und Stop-Meldungen angehoben.
40  *
41  * Revision 1.4  2001/12/13 02:04:16  alex
42  * - boesen "Speicherschiesser" in Log() gefixt.
43  *
44  * Revision 1.3  2001/12/12 23:31:24  alex
45  * - Zum Loggen wird nun auch syslog verwendet.
46  *
47  * Revision 1.2  2001/12/12 17:19:12  alex
48  * - in Log-Meldungen wird nun auch der Level der Meldung ausgegeben.
49  *
50  * Revision 1.1.1.1  2001/12/11 21:53:04  alex
51  * - Imported sources to CVS.
52  */
53
54
55 #define MAX_LOG_MSG_LEN 256
56
57
58 #include <portab.h>
59 #include "global.h"
60
61 #include <imp.h>
62 #include <assert.h>
63 #include <stdarg.h>
64 #include <stdio.h>
65 #include <string.h>
66
67 #ifdef USE_SYSLOG
68 #include <syslog.h>
69 #endif
70
71 #include <exp.h>
72 #include "log.h"
73
74
75 GLOBAL VOID Log_Init( VOID )
76 {
77         CHAR txt[64];
78
79         strcpy( txt, "" );
80
81 #ifdef USE_SYSLOG
82         if( txt[0] ) strcat( txt, "+" );
83         else strcat( txt, "-" );
84         strcat( txt, "SYSLOG" );
85 #endif
86 #ifdef STRICT_RFC
87         if( txt[0] ) strcat( txt, "+" );
88         else strcat( txt, "-" );
89         strcat( txt, "RFC" );
90 #endif
91 #ifdef DEBUG
92         if( txt[0] ) strcat( txt, "+" );
93         else strcat( txt, "-" );
94         strcat( txt, "DEBUG" );
95 #endif
96 #ifdef SNIFFER
97         if( txt[0] ) strcat( txt, "+" );
98         else strcat( txt, "-" );
99         strcat( txt, "SNIFFER" );
100 #endif
101
102 #ifdef USE_SYSLOG
103         openlog( PACKAGE, LOG_CONS|LOG_PID, LOG_LOCAL5 );
104 #endif
105         Log( LOG_NOTICE, PACKAGE" version "VERSION"%s started.", txt );
106 } /* Log_Init */
107
108
109 GLOBAL VOID Log_Exit( VOID )
110 {
111         Log( LOG_NOTICE, PACKAGE" done.");
112 #ifdef USE_SYSLOG
113         closelog( );
114 #endif
115 } /* Log_Exit */
116
117
118 GLOBAL VOID Log( CONST INT Level, CONST CHAR *Format, ... )
119 {
120         /* Eintrag in Logfile(s) schreiben */
121
122         CHAR msg[MAX_LOG_MSG_LEN];
123         va_list ap;
124
125         assert( Format != NULL );
126
127 #ifndef DEBUG
128         if( Level == LOG_DEBUG ) return;
129 #endif
130
131         /* String mit variablen Argumenten zusammenbauen ... */
132         va_start( ap, Format );
133         vsnprintf( msg, MAX_LOG_MSG_LEN - 1, Format, ap );
134         msg[MAX_LOG_MSG_LEN - 1] = '\0';
135
136         /* ... und ausgeben */
137         printf( "[%d] %s\n", Level, msg );
138 #ifdef USE_SYSLOG
139         syslog( Level, msg );
140 #endif
141
142         va_end( ap );
143 } /* Log */
144
145
146 GLOBAL VOID Log_Init_Resolver( VOID )
147 {
148 #ifdef USE_SYSLOG
149         openlog( PACKAGE, LOG_CONS|LOG_PID, LOG_LOCAL5 );
150 #endif
151 } /* Log_Init_Resolver */
152
153
154 GLOBAL VOID Log_Exit_Resolver( VOID )
155 {
156 #ifdef USE_SYSLOG
157         closelog( );
158 #endif
159 } /* Log_Exit_Resolver */
160
161
162 GLOBAL VOID Log_Resolver( CONST INT Level, CONST CHAR *Format, ... )
163 {
164         /* Eintrag des Resolver in Logfile(s) schreiben */
165
166         CHAR msg[MAX_LOG_MSG_LEN];
167         va_list ap;
168
169         assert( Format != NULL );
170
171 #ifndef USE_SYSLOG
172         return;
173 #endif
174
175 #ifndef DEBUG
176         if( Level == LOG_DEBUG ) return;
177 #endif
178
179         /* String mit variablen Argumenten zusammenbauen ... */
180         va_start( ap, Format );
181         vsnprintf( msg, MAX_LOG_MSG_LEN - 1, Format, ap );
182         msg[MAX_LOG_MSG_LEN - 1] = '\0';
183
184         /* ... und ausgeben */
185         syslog( Level, msg );
186
187         va_end( ap );
188 } /* Log_Resolver */
189
190
191 /* -eof- */