diff --git a/doc/conf/examples/example.conf b/doc/conf/examples/example.conf index 251aa19dd..bf1ec00fd 100644 --- a/doc/conf/examples/example.conf +++ b/doc/conf/examples/example.conf @@ -265,20 +265,14 @@ drpass { * See also https://www.unrealircd.org/docs/Log_block */ -/* This is a good default, it logs everything */ -log "ircd.log" { - flags { - oper; - connects; - server-connects; - kills; - errors; - flood; - sadmin-commands; - chg-commands; - oper-override; - tkl; - spamfilter; +/* This is a good default, it logs nearly everything */ +log { + source { + all; + !SOMETHING; + } + destination { + file "ircd.log" { maxsize 100M; } } } diff --git a/include/h.h b/include/h.h index c689a0521..c4d6c9aac 100644 --- a/include/h.h +++ b/include/h.h @@ -1126,6 +1126,7 @@ extern LogData *log_data_link_block(ConfigItem_link *link); extern LogData *log_data_tkl(const char *key, TKL *tkl); extern LogData *log_data_tls_error(void); extern void log_blocks_switchover(void); +extern void postconf_defaults_log_block(void); extern LogLevel log_level_stringtoval(const char *str); extern const char *log_level_valtostring(LogLevel loglevel); extern LogLevel log_level_stringtoval(const char *str); diff --git a/src/conf.c b/src/conf.c index 64b6cba5c..efd3684b7 100644 --- a/src/conf.c +++ b/src/conf.c @@ -1847,6 +1847,8 @@ void postconf_defaults(void) safe_strdup(tk->set_by, conf_me->name ? conf_me->name : "~server~"); } } + + postconf_defaults_log_block(); } void postconf_fixes(void) diff --git a/src/log.c b/src/log.c index 306322bff..15e02dbae 100644 --- a/src/log.c +++ b/src/log.c @@ -1660,3 +1660,32 @@ void log_blocks_switchover(void) * blocks, then we would have opened the file twice. * Better to use an extra layer to keep track of files. */ + +void postconf_defaults_log_block(void) +{ + Log *l; + LogSource *ls; + + /* Is there any log block to disk? Then nothing to do. */ + if (logs[LOG_DEST_OTHER]) + return; + + unreal_log(ULOG_WARNING, "log", "NO_DISK_LOG_BLOCK", NULL, + "No log { } block found that logs to disk -- " + "logging everything in text format to 'ircd.log'"); + + /* Create a default log block */ + l = safe_alloc(sizeof(Log)); + l->logfd = -1; + l->type = LOG_TYPE_TEXT; /* text */ + l->maxsize = 100000000; /* maxsize 100M */ + safe_strdup(l->file, "ircd.log"); + convert_to_absolute_path(&l->file, LOGDIR); + AddListItem(l, logs[LOG_DEST_OTHER]); + + /* And the source filter */ + ls = add_log_source("all"); + AppendListItem(ls, l->sources); + ls = add_log_source("!SOMETHING"); + AppendListItem(ls, l->sources); +}