mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-18 07:48:14 +00:00
logger: Add rotatestrategy option of 'none' which does not perform rotations
With this option in use, it may be necessary to regulate your log files
externally.
(closes issue ASTERISK-20189)
Reported by: Jaco Kroon
Patches:
asterisk-logger-norotate-trunk.patch uploaded by Jaco Kroon (license 5671)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@372976 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -40,6 +40,9 @@
|
|||||||
;queue_log_name = queue_log
|
;queue_log_name = queue_log
|
||||||
;
|
;
|
||||||
; Log rotation strategy:
|
; Log rotation strategy:
|
||||||
|
; none: Do not perform any logrotation at all. You should make
|
||||||
|
; very sure to set up some external logrotate mechanism
|
||||||
|
; as the asterisk logs can get very large, very quickly.
|
||||||
; sequential: Rename archived logs in order, such that the newest
|
; sequential: Rename archived logs in order, such that the newest
|
||||||
; has the highest sequence number [default]. When
|
; has the highest sequence number [default]. When
|
||||||
; exec_after_rotate is set, ${filename} will specify
|
; exec_after_rotate is set, ${filename} will specify
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ struct ast_callid {
|
|||||||
AST_THREADSTORAGE_CUSTOM(unique_callid, NULL, unique_callid_cleanup);
|
AST_THREADSTORAGE_CUSTOM(unique_callid, NULL, unique_callid_cleanup);
|
||||||
|
|
||||||
static enum rotatestrategy {
|
static enum rotatestrategy {
|
||||||
|
NONE = 0, /* Do not rotate log files at all, instead rely on external mechanisms */
|
||||||
SEQUENTIAL = 1 << 0, /* Original method - create a new file, in order */
|
SEQUENTIAL = 1 << 0, /* Original method - create a new file, in order */
|
||||||
ROTATE = 1 << 1, /* Rotate all files, such that the oldest file has the highest suffix */
|
ROTATE = 1 << 1, /* Rotate all files, such that the oldest file has the highest suffix */
|
||||||
TIMESTAMP = 1 << 2, /* Append the epoch timestamp onto the end of the archived file */
|
TIMESTAMP = 1 << 2, /* Append the epoch timestamp onto the end of the archived file */
|
||||||
@@ -427,6 +428,8 @@ static void init_logger_chain(int locked, const char *altconf)
|
|||||||
rotatestrategy = ROTATE;
|
rotatestrategy = ROTATE;
|
||||||
} else if (strcasecmp(s, "sequential") == 0) {
|
} else if (strcasecmp(s, "sequential") == 0) {
|
||||||
rotatestrategy = SEQUENTIAL;
|
rotatestrategy = SEQUENTIAL;
|
||||||
|
} else if (strcasecmp(s, "none") == 0) {
|
||||||
|
rotatestrategy = NONE;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Unknown rotatestrategy: %s\n", s);
|
fprintf(stderr, "Unknown rotatestrategy: %s\n", s);
|
||||||
}
|
}
|
||||||
@@ -610,6 +613,9 @@ static int rotate_file(const char *filename)
|
|||||||
char *suffixes[4] = { "", ".gz", ".bz2", ".Z" };
|
char *suffixes[4] = { "", ".gz", ".bz2", ".Z" };
|
||||||
|
|
||||||
switch (rotatestrategy) {
|
switch (rotatestrategy) {
|
||||||
|
case NONE:
|
||||||
|
/* No rotation */
|
||||||
|
break;
|
||||||
case SEQUENTIAL:
|
case SEQUENTIAL:
|
||||||
for (x = 0; ; x++) {
|
for (x = 0; ; x++) {
|
||||||
snprintf(new, sizeof(new), "%s.%d", filename, x);
|
snprintf(new, sizeof(new), "%s.%d", filename, x);
|
||||||
@@ -810,7 +816,7 @@ static int reload_logger(int rotate, const char *altconf)
|
|||||||
}
|
}
|
||||||
if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) {
|
if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) {
|
||||||
int rotate_this = 0;
|
int rotate_this = 0;
|
||||||
if (ftello(f->fileptr) > 0x40000000) { /* Arbitrarily, 1 GB */
|
if (rotatestrategy != NONE && ftello(f->fileptr) > 0x40000000) { /* Arbitrarily, 1 GB */
|
||||||
/* Be more proactive about rotating massive log files */
|
/* Be more proactive about rotating massive log files */
|
||||||
rotate_this = 1;
|
rotate_this = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user