ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/logger.C
Revision: 1.4
Committed: Sun Sep 10 16:00:23 2006 UTC (17 years, 9 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.3: +29 -26 lines
Log Message:
indent

File Contents

# User Rev Content
1 root 1.4
2 elmex 1.1 /*
3     * static char *rcsid_loger_c =
4 root 1.4 * "$Id: logger.C,v 1.3 2006-08-29 08:01:35 root Exp $ ";
5 elmex 1.1 */
6    
7     /*
8     CrossFire, A Multiplayer game for X-windows
9    
10     Copyright (C) 2002 Mark Wedel & Crossfire Development Team
11     Copyright (C) 1992 Frank Tore Johansen
12    
13     This program is free software; you can redistribute it and/or modify
14     it under the terms of the GNU General Public License as published by
15     the Free Software Foundation; either version 2 of the License, or
16     (at your option) any later version.
17    
18     This program is distributed in the hope that it will be useful,
19     but WITHOUT ANY WARRANTY; without even the implied warranty of
20     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21     GNU General Public License for more details.
22    
23     You should have received a copy of the GNU General Public License
24     along with this program; if not, write to the Free Software
25     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26    
27     The authors can be reached via e-mail at crossfire-devel@real-time.com
28     */
29    
30    
31     #include <stdarg.h>
32     #include <global.h>
33     #include <funcpoint.h>
34    
35     /*
36     * Logs a message to stderr, or to file, and/or even to socket.
37     * Or discards the message if it is of no importanse, and none have
38     * asked to hear messages of that logLevel.
39     *
40     * See include/logger.h for possible logLevels. Messages with llevInfo
41     * and llevError are always printed, regardless of debug mode.
42     */
43    
44 root 1.4 void
45     LOG (LogLevel logLevel, const char *format, ...)
46 elmex 1.1 {
47 root 1.4 char buf[20480]; /* This needs to be really really big - larger
48     * than any other buffer, since that buffer may
49     * need to be put in this one.
50     */
51 elmex 1.1 char tbuf[20480];
52    
53     time_t curtime = time (NULL);
54     struct tm *ptime = localtime (&curtime);
55    
56     strftime (tbuf, 256, "%Y-%m-%d %H:%M:%S ", ptime);
57    
58     va_list ap;
59 root 1.4
60     va_start (ap, format);
61 elmex 1.1
62     buf[0] = '\0';
63     if (logLevel <= settings.debug)
64 root 1.4 {
65     vsnprintf (buf, sizeof (buf), format, ap);
66     strncat (tbuf, buf, 20460);
67     #ifdef WIN32 /* ---win32 change log handling for win32 */
68     fputs (tbuf, logfile); /* wrote to file or stdout */
69     # ifdef DEBUG /* if we have a debug version, we want see ALL output */
70     fflush (logfile); /* so flush this! */
71     # endif
72     if (logfile != stderr) /* if was it a logfile wrote it to screen too */
73     fputs (tbuf, stderr);
74 elmex 1.1 #else
75 root 1.4 fputs (tbuf, logfile);
76 elmex 1.1 #endif
77 root 1.4 }
78     if (!exiting && !trying_emergency_save && logLevel == llevError && ++nroferrors > MAX_ERRORS)
79     {
80     exiting = 1;
81     if (!trying_emergency_save)
82     emergency_save (0);
83     }
84     va_end (ap);
85 elmex 1.1 }