Skip to content
Snippets Groups Projects
Commit e5203bb2 authored by Joshua Colp's avatar Joshua Colp
Browse files

Add option to logger to rename log files with timestamp (issue #8020 reported by jmls)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@44172 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent 21b32544
Branches
Tags
No related merge requests found
...@@ -19,3 +19,5 @@ Changes since Asterisk 1.4-beta was branched: ...@@ -19,3 +19,5 @@ Changes since Asterisk 1.4-beta was branched:
and/or H.450 supplementary service) and/or H.450 supplementary service)
* Added keepstats option to queues.conf which will keep queue * Added keepstats option to queues.conf which will keep queue
statistics during a reload. statistics during a reload.
* Added rotatetimestamp option to logger.conf which will use
the time to name the logger files instead of sequence number.
...@@ -24,6 +24,11 @@ ...@@ -24,6 +24,11 @@
; (defaults to queue_log) ; (defaults to queue_log)
;queue_log_name = queue_log ;queue_log_name = queue_log
; ;
; Rename the logfiles using a timestamp instead of a
; sequence number when "logger rotate" is executed
; (defaults to no).
;rotatetimestamp = yes
;
; This determines whether or not we log generic events to a file ; This determines whether or not we log generic events to a file
; (defaults to yes). ; (defaults to yes).
;event_log = no ;event_log = no
......
...@@ -87,6 +87,7 @@ static char queue_log_name[256] = QUEUELOG; ...@@ -87,6 +87,7 @@ static char queue_log_name[256] = QUEUELOG;
static int filesize_reload_needed = 0; static int filesize_reload_needed = 0;
static int global_logmask = -1; static int global_logmask = -1;
static int rotatetimestamp = 0;
static struct { static struct {
unsigned int queue_log:1; unsigned int queue_log:1;
...@@ -340,6 +341,8 @@ static void init_logger_chain(void) ...@@ -340,6 +341,8 @@ static void init_logger_chain(void)
logfiles.event_log = ast_true(s); logfiles.event_log = ast_true(s);
if ((s = ast_variable_retrieve(cfg, "general", "queue_log_name"))) if ((s = ast_variable_retrieve(cfg, "general", "queue_log_name")))
ast_copy_string(queue_log_name, s, sizeof(queue_log_name)); ast_copy_string(queue_log_name, s, sizeof(queue_log_name));
if ((s = ast_variable_retrieve(cfg, "general", "rotatetimestamp")))
rotatetimestamp = ast_true(s);
AST_LIST_LOCK(&logchannels); AST_LIST_LOCK(&logchannels);
var = ast_variable_browse(cfg, "logfiles"); var = ast_variable_browse(cfg, "logfiles");
...@@ -404,16 +407,19 @@ int reload_logger(int rotate) ...@@ -404,16 +407,19 @@ int reload_logger(int rotate)
f->fileptr = NULL; f->fileptr = NULL;
if (rotate) { if (rotate) {
ast_copy_string(old, f->filename, sizeof(old)); ast_copy_string(old, f->filename, sizeof(old));
for (x = 0; ; x++) { if (!rotatetimestamp) {
snprintf(new, sizeof(new), "%s.%d", f->filename, x); for (x = 0; ; x++) {
myf = fopen((char *)new, "r"); snprintf(new, sizeof(new), "%s.%d", f->filename, x);
if (myf) myf = fopen((char *)new, "r");
fclose(myf); if (myf)
else fclose(myf);
break; else
} break;
}
} else
snprintf(new, sizeof(new), "%s.%ld", f->filename, (long)time(NULL));
/* do it */ /* do it */
if (rename(old,new)) if (rename(old,new))
fprintf(stderr, "Unable to rename file '%s' to '%s'\n", old, new); fprintf(stderr, "Unable to rename file '%s' to '%s'\n", old, new);
...@@ -428,14 +434,17 @@ int reload_logger(int rotate) ...@@ -428,14 +434,17 @@ int reload_logger(int rotate)
if (logfiles.event_log) { if (logfiles.event_log) {
snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG); snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG);
if (event_rotate) { if (event_rotate) {
for (x=0;;x++) { if (!rotatetimestamp) {
snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, EVENTLOG,x); for (x=0;;x++) {
myf = fopen((char *)new, "r"); snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, EVENTLOG,x);
if (myf) /* File exists */ myf = fopen((char *)new, "r");
fclose(myf); if (myf) /* File exists */
else fclose(myf);
break; else
} break;
}
} else
snprintf(new, sizeof(new), "%s/%s.%ld", (char *)ast_config_AST_LOG_DIR, EVENTLOG,(long)time(NULL));
/* do it */ /* do it */
if (rename(old,new)) if (rename(old,new))
...@@ -456,15 +465,18 @@ int reload_logger(int rotate) ...@@ -456,15 +465,18 @@ int reload_logger(int rotate)
if (logfiles.queue_log) { if (logfiles.queue_log) {
snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, queue_log_name); snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, queue_log_name);
if (queue_rotate) { if (queue_rotate) {
for (x = 0; ; x++) { if (!rotatetimestamp) {
snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, queue_log_name, x); for (x = 0; ; x++) {
myf = fopen((char *)new, "r"); snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, queue_log_name, x);
if (myf) /* File exists */ myf = fopen((char *)new, "r");
fclose(myf); if (myf) /* File exists */
else fclose(myf);
break; else
} break;
}
} else
snprintf(new, sizeof(new), "%s/%s.%ld", (char *)ast_config_AST_LOG_DIR, queue_log_name,(long)time(NULL));
/* do it */ /* do it */
if (rename(old, new)) if (rename(old, new))
ast_log(LOG_ERROR, "Unable to rename file '%s' to '%s'\n", old, new); ast_log(LOG_ERROR, "Unable to rename file '%s' to '%s'\n", old, new);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment