23 #define MAX_LOG_LINE (1024) 26 static int debug_flag;
27 static FILE *debug_log_target = 0;
43 {
"local0", LOG_LOCAL0 },
44 {
"local1", LOG_LOCAL1 },
45 {
"local2", LOG_LOCAL2 },
46 {
"local3", LOG_LOCAL3 },
47 {
"local4", LOG_LOCAL4 },
48 {
"local5", LOG_LOCAL5 },
49 {
"local6", LOG_LOCAL6 },
50 {
"local7", LOG_LOCAL7 },
51 {
"log_user", LOG_USER },
58 if (facility == NULL) {
61 for (lp = _log_facilities; lp->
facility; lp++) {
62 if (!strcasecmp(lp->
facility, facility)) {
82 openlog(ident, LOG_PID, fnum);
91 log->file = fopen(ident,
"a+");
95 "ERROR: couldn't open logfile: %s\n" 96 " logging will go to stdout instead\n", strerror(errno));
112 va_start(ap, msgfmt);
114 vsyslog(level, msgfmt, ap);
121 syslog(level,
"%s", message);
145 for (pos = message; *pos !=
'\0'; pos++);
147 va_start(ap, msgfmt);
153 if(log && log->file) {
154 fprintf(log->file,
"%s", message);
155 fprintf(log->file,
"\n");
163 if (!debug_log_target) {
164 debug_log_target = stderr;
168 fprintf(debug_log_target,
"%s\n", message);
169 fflush(debug_log_target);
185 void debug_log(
const char *file,
int line,
const char *msgfmt, ...)
192 if (!debug_log_target) {
193 debug_log_target = stderr;
203 snprintf(message,
MAX_DEBUG,
"%s%s:%d ", pos, file, line);
206 for (pos = message; *pos !=
'\0'; pos++);
208 va_start(ap, msgfmt);
209 vsnprintf(pos,
MAX_DEBUG - sz, msgfmt, ap);
211 fprintf(debug_log_target,
"%s", message);
212 fprintf(debug_log_target,
"\n");
213 fflush(debug_log_target);
234 if (debug_log_target != 0 &&
235 debug_log_target != stderr)
237 fprintf(debug_log_target,
"Closing log\n");
238 fclose(debug_log_target);
240 debug_log_target = stderr;
246 debug_log_target = fopen(filename,
"a+");
248 if (debug_log_target) {
251 debug_log_target = stderr;
252 log_debug(
ZONE,
"Failed to open debug output file %s. Fallback to stderr", filename);
256 debug_log_target = stderr;
261 void debug_log(
const char *file,
int line,
const char *msgfmt, ...)
JABBERD2_API void set_debug_file(const char *filename)
void log_write(log_t log, int level, const char *msgfmt,...)
static const char * _log_level[]
holder for the config hash and nad
JABBERD2_API int get_debug_flag(void)
void set_debug_log_from_config(config_t c)
static log_facility_t _log_facilities[]
void debug_log(const char *file, int line, const char *msgfmt,...)
static int _log_facility(const char *facility)
void set_debug_flag(int v)
log_t log_new(log_type_t type, const char *ident, const char *facility)
const char * config_get_one(config_t c, const char *key, int num)
get config value n for this key