rename player -> user
[umurmur.git] / src / log.c
1 /* Copyright (C) 2009-2010, Martin Johansson <martin@fatbob.nu>
2    Copyright (C) 2005-2010, Thorvald Natvig <thorvald@natvig.com>
3
4    All rights reserved.
5
6    Redistribution and use in source and binary forms, with or without
7    modification, are permitted provided that the following conditions
8    are met:
9
10    - Redistributions of source code must retain the above copyright notice,
11      this list of conditions and the following disclaimer.
12    - Redistributions in binary form must reproduce the above copyright notice,
13      this list of conditions and the following disclaimer in the documentation
14      and/or other materials provided with the distribution.
15    - Neither the name of the Developers nor the names of its contributors may
16      be used to endorse or promote products derived from this software without
17      specific prior written permission.
18
19    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32 #include <stdarg.h>
33 #include <stdio.h>
34 #include <stdlib.h>
35 #include <syslog.h>
36 #include <string.h>
37
38 #include "log.h"
39
40 #define STRSIZE 254
41
42 static bool_t termprint;
43
44 void Log_init(bool_t terminal)
45 {
46         termprint = terminal;
47         if (!termprint)
48                 openlog("uMurmurd", LOG_PID, LOG_DAEMON);
49 }
50
51 void Log_free()
52 {
53         if (!termprint)
54                 closelog();
55 }
56                 
57
58 void logthis(const char *logstring, ...)
59 {
60         va_list argp;
61         char buf[STRSIZE + 2];
62         
63         va_start(argp, logstring);
64         vsnprintf(&buf[0], STRSIZE, logstring, argp);
65         va_end(argp);
66         strcat(buf, "\n");
67         if (termprint)
68                 fprintf(stderr, "%s", buf);
69         else
70                 syslog(LOG_INFO, buf);
71 }
72
73 void Log_warn(const char *logstring, ...)
74 {
75         va_list argp;
76         char buf[STRSIZE + 2];
77         int offset = 0;
78         
79         va_start(argp, logstring);
80         offset = sprintf(buf, "WARN: ");
81         vsnprintf(&buf[offset], STRSIZE - offset, logstring, argp);
82         va_end(argp);
83         strcat(buf, "\n");
84         if (termprint)
85                 fprintf(stderr, "%s", buf);
86         else
87                 syslog(LOG_WARNING, buf);
88 }
89
90 void Log_info(const char *logstring, ...)
91 {
92         va_list argp;
93         char buf[STRSIZE + 2];
94         int offset = 0;
95         
96         va_start(argp, logstring);
97         offset = sprintf(buf, "INFO: ");
98         vsnprintf(&buf[offset], STRSIZE - offset, logstring, argp);
99         va_end(argp);
100         strcat(buf, "\n");
101         if (termprint)
102                 fprintf(stderr, "%s", buf);
103         else
104                 syslog(LOG_INFO, buf);
105 }
106 void Log_info_client(client_t *client, const char *logstring, ...)
107 {
108         va_list argp;
109         char buf[STRSIZE + 2];
110         int offset = 0;
111         
112         va_start(argp, logstring);
113         offset = sprintf(buf, "INFO: ");
114         offset += vsnprintf(&buf[offset], STRSIZE - offset, logstring, argp);
115         va_end(argp);
116         offset += snprintf(&buf[offset], STRSIZE - offset, " - [%d] %s@%s:%d",
117                                            client->sessionId,
118                                            client->username == NULL ? "" : client->username,
119                                            inet_ntoa(client->remote_tcp.sin_addr),
120                                            ntohs(client->remote_tcp.sin_port));
121         strcat(buf, "\n");
122         if (termprint)
123                 fprintf(stderr, "%s", buf);
124         else
125                 syslog(LOG_INFO, buf);
126         
127 }
128
129 #ifdef DEBUG
130 void Log_debug(const char *logstring, ...)
131 {
132         va_list argp;
133         char buf[STRSIZE + 2];
134         int offset = 0;
135         
136         va_start(argp, logstring);
137         offset = sprintf(buf, "DEBUG: ");
138         vsnprintf(&buf[offset], STRSIZE - offset, logstring, argp);
139         va_end(argp);
140         strcat(buf, "\n");
141         if (termprint)
142                 fprintf(stderr, "%s", buf);
143         else
144                 syslog(LOG_DEBUG, buf);
145 }
146 #endif
147
148 void Log_fatal(const char *logstring, ...)
149 {
150         va_list argp;
151         char buf[STRSIZE + 2];
152         int offset = 0;
153         va_start(argp, logstring);
154         offset = sprintf(buf, "FATAL: ");
155         vsnprintf(&buf[offset], STRSIZE - offset, logstring, argp);
156         va_end(argp);
157         strcat(buf, "\n");
158         if (termprint)
159                 fprintf(stderr, "%s", buf);
160         else
161                 syslog(LOG_CRIT, buf);
162         exit(1);
163 }