Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 69 additions & 28 deletions log.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@
#include <string.h>
#include <time.h>

#ifdef __FreeBSD__
#include <syslog.h>
#endif

#include "upnpglobalvars.h"
#include "log.h"

Expand Down Expand Up @@ -56,6 +60,18 @@ const char *level_name[] = {
0
};

#ifdef __FreeBSD__
int syslog_level[] = {
LOG_DEBUG, // E_OFF
LOG_ERR, // E_FATAL
LOG_ERR, // E_ERROR
LOG_WARNING, // E_WARN
LOG_INFO, // E_INFO
LOG_DEBUG, // E_DEBUG
LOG_DEBUG // E_MAXDEBUG
};
#endif

void
log_close(void)
{
Expand All @@ -66,7 +82,7 @@ log_close(void)
void
log_reopen(void)
{
if (log_path[0] && log_fp)
if (!GETFLAG(SYSLOG_MASK) && log_path[0] && log_fp)
{
char logfile[1048];
snprintf(logfile, sizeof(logfile), "%s/" LOGFILE_NAME, log_path);
Expand Down Expand Up @@ -135,7 +151,7 @@ log_init(const char *debug)
}
}

if (log_path[0])
if (!GETFLAG(SYSLOG_MASK) && log_path[0])
{
char logfile[1048];
snprintf(logfile, sizeof(logfile), "%s/" LOGFILE_NAME, log_path);
Expand All @@ -151,40 +167,65 @@ void
log_err(int level, enum _log_facility facility, char *fname, int lineno, char *fmt, ...)
{
va_list ap;
static char *msgbuf = NULL;
static size_t msgbuf_size = 0;
size_t required;

if (level && level>log_level[facility] && level>E_FATAL)
return;

if (!log_fp)
log_fp = stdout;

// timestamp
if (!GETFLAG(SYSTEMD_MASK))
{
time_t t;
struct tm *tm;
t = time(NULL);
tm = localtime(&t);
fprintf(log_fp, "[%04d/%02d/%02d %02d:%02d:%02d] ",
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec);
}
// user log
if (!GETFLAG(SYSLOG_MASK)) {
if (!log_fp)
log_fp = stdout;

// timestamp
if (!GETFLAG(SYSTEMD_MASK))
{
time_t t;
struct tm *tm;
t = time(NULL);
tm = localtime(&t);
fprintf(log_fp, "[%04d/%02d/%02d %02d:%02d:%02d] ",
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec);
}

if (level)
fprintf(log_fp, "%s:%d: %s: ", fname, lineno, level_name[level]);
else
fprintf(log_fp, "%s:%d: ", fname, lineno);
if (level)
fprintf(log_fp, "%s:%d: %s: ", fname, lineno, level_name[level]);
else
fprintf(log_fp, "%s:%d: ", fname, lineno);

// user log
va_start(ap, fmt);
if (vfprintf(log_fp, fmt, ap) == -1)
{
va_end(ap);
return;
}
va_end(ap);

// user log
va_start(ap, fmt);
if (vfprintf(log_fp, fmt, ap) == -1)
{
fflush(log_fp);
} else {
va_start(ap, fmt);
required = vsnprintf(msgbuf, msgbuf_size, fmt, ap) + 1;
Comment thread
stesser marked this conversation as resolved.
va_end(ap);
return;
}
va_end(ap);

fflush(log_fp);
if (required > msgbuf_size) {
free(msgbuf);
Comment thread
stesser marked this conversation as resolved.
msgbuf = malloc(required);
msgbuf_size = required;

va_start(ap, fmt);
(void)vsnprintf(msgbuf, msgbuf_size, fmt, ap);
va_end(ap);
}

if (level)
syslog(syslog_level[level], "%s:%d: %s: %s", fname, lineno, level_name[level], msgbuf);
else
syslog(LOG_INFO, "%s:%d: %s", fname, lineno, msgbuf);
}
Comment thread
stesser marked this conversation as resolved.

if (level==E_FATAL)
exit(-1);
Expand Down
4 changes: 4 additions & 0 deletions minidlna.c
Original file line number Diff line number Diff line change
Expand Up @@ -954,6 +954,10 @@ init(int argc, char **argv)
case 'S':
SETFLAG(SYSTEMD_MASK);
break;
#elif defined(__FreeBSD__)
case 'S':
SETFLAG(SYSLOG_MASK);
break;
#endif
case 'V':
printf("Version " MINIDLNA_VERSION "\n");
Expand Down
5 changes: 5 additions & 0 deletions upnpglobalvars.h
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,11 @@ extern uint32_t runtime_flags;
#define RESCAN_MASK 0x0200
#define SUBTITLES_MASK 0x0400
#define FORCE_ALPHASORT_MASK 0x0800
#ifdef __FreeBSD__
#define SYSLOG_MASK 0x1000
#else
#define SYSLOG_MASK 0x0000
#endif

#define SETFLAG(mask) runtime_flags |= mask
#define GETFLAG(mask) (runtime_flags & mask)
Expand Down