mirror of
https://gitlab.xiph.org/xiph/icecast-server.git
synced 2025-02-02 15:07:36 -05:00
new external api to support log archiving
svn path=/icecast/trunk/log/; revision=10288
This commit is contained in:
parent
3a85a143b5
commit
6063820441
@ -56,6 +56,7 @@ typedef struct log_tag
|
|||||||
FILE *logfile;
|
FILE *logfile;
|
||||||
off_t size;
|
off_t size;
|
||||||
off_t trigger_level;
|
off_t trigger_level;
|
||||||
|
int archive_timestamp;
|
||||||
|
|
||||||
char *buffer;
|
char *buffer;
|
||||||
} log_t;
|
} log_t;
|
||||||
@ -68,7 +69,7 @@ static void _lock_logger();
|
|||||||
static void _unlock_logger();
|
static void _unlock_logger();
|
||||||
|
|
||||||
|
|
||||||
static int _log_open (int id)
|
static int _log_open (int id, const char *file_timestamp)
|
||||||
{
|
{
|
||||||
if (loglist [id] . in_use == 0)
|
if (loglist [id] . in_use == 0)
|
||||||
return 0;
|
return 0;
|
||||||
@ -87,7 +88,12 @@ static int _log_open (int id)
|
|||||||
fclose (loglist [id] . logfile);
|
fclose (loglist [id] . logfile);
|
||||||
loglist [id] . logfile = NULL;
|
loglist [id] . logfile = NULL;
|
||||||
/* simple rename, but could use time providing locking were used */
|
/* simple rename, but could use time providing locking were used */
|
||||||
|
if (loglist[id].archive_timestamp && file_timestamp) {
|
||||||
|
snprintf (new_name, sizeof(new_name), "%s.%s", loglist[id].filename, file_timestamp);
|
||||||
|
}
|
||||||
|
else {
|
||||||
snprintf (new_name, sizeof(new_name), "%s.old", loglist [id] . filename);
|
snprintf (new_name, sizeof(new_name), "%s.old", loglist [id] . filename);
|
||||||
|
}
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (stat (new_name, &st) == 0)
|
if (stat (new_name, &st) == 0)
|
||||||
remove (new_name);
|
remove (new_name);
|
||||||
@ -205,6 +211,16 @@ int log_set_filename(int id, const char *filename)
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int log_set_archive_timestamp(int id, int value)
|
||||||
|
{
|
||||||
|
if (id < 0 || id >= LOG_MAXLOGS)
|
||||||
|
return LOG_EINSANE;
|
||||||
|
_lock_logger();
|
||||||
|
loglist[id].archive_timestamp = value;
|
||||||
|
_unlock_logger();
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int log_open_with_buffer(const char *filename, int size)
|
int log_open_with_buffer(const char *filename, int size)
|
||||||
{
|
{
|
||||||
@ -289,6 +305,7 @@ void log_write(int log_id, unsigned priority, const char *cat, const char *func,
|
|||||||
{
|
{
|
||||||
static char *prior[] = { "EROR", "WARN", "INFO", "DBUG" };
|
static char *prior[] = { "EROR", "WARN", "INFO", "DBUG" };
|
||||||
char tyme[128];
|
char tyme[128];
|
||||||
|
char filename_tyme[128];
|
||||||
char pre[256];
|
char pre[256];
|
||||||
char line[LOG_MAXLINELEN];
|
char line[LOG_MAXLINELEN];
|
||||||
time_t now;
|
time_t now;
|
||||||
@ -306,10 +323,11 @@ void log_write(int log_id, unsigned priority, const char *cat, const char *func,
|
|||||||
|
|
||||||
_lock_logger();
|
_lock_logger();
|
||||||
strftime(tyme, sizeof (tyme), "[%Y-%m-%d %H:%M:%S]", localtime(&now));
|
strftime(tyme, sizeof (tyme), "[%Y-%m-%d %H:%M:%S]", localtime(&now));
|
||||||
|
strftime(filename_tyme, sizeof (filename_tyme), "%Y%m%d_%H%M%S", localtime(&now));
|
||||||
|
|
||||||
snprintf(pre, sizeof (pre), "%s %s%s", prior[priority-1], cat, func);
|
snprintf(pre, sizeof (pre), "%s %s%s", prior[priority-1], cat, func);
|
||||||
|
|
||||||
if (_log_open (log_id))
|
if (_log_open (log_id, filename_tyme))
|
||||||
{
|
{
|
||||||
int len = fprintf (loglist[log_id].logfile, "%s %s %s\n", tyme, pre, line);
|
int len = fprintf (loglist[log_id].logfile, "%s %s %s\n", tyme, pre, line);
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
@ -324,14 +342,19 @@ void log_write_direct(int log_id, const char *fmt, ...)
|
|||||||
{
|
{
|
||||||
char line[LOG_MAXLINELEN];
|
char line[LOG_MAXLINELEN];
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
char filename_tyme[128];
|
||||||
|
time_t now;
|
||||||
|
|
||||||
if (log_id < 0) return;
|
if (log_id < 0) return;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
|
|
||||||
|
now = time(NULL);
|
||||||
|
|
||||||
_lock_logger();
|
_lock_logger();
|
||||||
vsnprintf(line, LOG_MAXLINELEN, fmt, ap);
|
vsnprintf(line, LOG_MAXLINELEN, fmt, ap);
|
||||||
if (_log_open (log_id))
|
strftime(filename_tyme, sizeof (filename_tyme), "%Y%m%d_%H%M%S", localtime(&now));
|
||||||
|
if (_log_open (log_id, filename_tyme))
|
||||||
{
|
{
|
||||||
int len = fprintf(loglist[log_id].logfile, "%s\n", line);
|
int len = fprintf(loglist[log_id].logfile, "%s\n", line);
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
|
@ -29,6 +29,7 @@ int log_open_with_buffer(const char *filename, int size);
|
|||||||
void log_set_level(int log_id, unsigned level);
|
void log_set_level(int log_id, unsigned level);
|
||||||
void log_set_trigger(int id, unsigned trigger);
|
void log_set_trigger(int id, unsigned trigger);
|
||||||
int log_set_filename(int id, const char *filename);
|
int log_set_filename(int id, const char *filename);
|
||||||
|
int log_set_archive_timestamp(int id, int value);
|
||||||
void log_flush(int log_id);
|
void log_flush(int log_id);
|
||||||
void log_reopen(int log_id);
|
void log_reopen(int log_id);
|
||||||
void log_close(int log_id);
|
void log_close(int log_id);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user