2 * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
9 /* DEBUG: section 50 Log file handling */
17 #include "log/ModSyslog.h"
19 /* Define LOG_AUTHPRIV as LOG_AUTH on systems still using the old deprecated LOG_AUTH */
20 #if !defined(LOG_AUTHPRIV) && defined(LOG_AUTH)
21 #define LOG_AUTHPRIV LOG_AUTH
30 syslog_ntoa(const char *s
)
32 #define syslog_symbol(a) #a, a
33 static syslog_symbol_t symbols
[] = {
35 {syslog_symbol(LOG_AUTHPRIV
)},
38 {syslog_symbol(LOG_DAEMON
)},
41 {syslog_symbol(LOG_LOCAL0
)},
44 {syslog_symbol(LOG_LOCAL1
)},
47 {syslog_symbol(LOG_LOCAL2
)},
50 {syslog_symbol(LOG_LOCAL3
)},
53 {syslog_symbol(LOG_LOCAL4
)},
56 {syslog_symbol(LOG_LOCAL5
)},
59 {syslog_symbol(LOG_LOCAL6
)},
62 {syslog_symbol(LOG_LOCAL7
)},
65 {syslog_symbol(LOG_USER
)},
68 {syslog_symbol(LOG_ERR
)},
71 {syslog_symbol(LOG_WARNING
)},
74 {syslog_symbol(LOG_NOTICE
)},
77 {syslog_symbol(LOG_INFO
)},
80 {syslog_symbol(LOG_DEBUG
)},
86 for (p
= symbols
; p
->name
!= NULL
; ++p
)
87 if (!strcmp(s
, p
->name
) || !strcasecmp(s
, p
->name
+ 4))
90 debugs(1, DBG_IMPORTANT
, "Unknown syslog facility/priority '" << s
<< "'");
98 #define PRIORITY_MASK (LOG_ERR | LOG_WARNING | LOG_NOTICE | LOG_INFO | LOG_DEBUG)
101 logfile_mod_syslog_writeline(Logfile
* lf
, const char *buf
, size_t)
103 l_syslog_t
*ll
= (l_syslog_t
*) lf
->data
;
104 syslog(ll
->syslog_priority
, "%s", (char *) buf
);
108 logfile_mod_syslog_linestart(Logfile
*)
113 logfile_mod_syslog_lineend(Logfile
*)
118 logfile_mod_syslog_flush(Logfile
*)
123 logfile_mod_syslog_rotate(Logfile
*, const int16_t)
128 logfile_mod_syslog_close(Logfile
*lf
)
135 * This code expects the path to be syslog:<priority>
138 logfile_mod_syslog_open(Logfile
* lf
, const char *path
, size_t, int)
140 lf
->f_close
= logfile_mod_syslog_close
;
141 lf
->f_linewrite
= logfile_mod_syslog_writeline
;
142 lf
->f_linestart
= logfile_mod_syslog_linestart
;
143 lf
->f_lineend
= logfile_mod_syslog_lineend
;
144 lf
->f_flush
= logfile_mod_syslog_flush
;
145 lf
->f_rotate
= logfile_mod_syslog_rotate
;
147 l_syslog_t
*ll
= static_cast<l_syslog_t
*>(xcalloc(1, sizeof(*ll
)));
150 ll
->syslog_priority
= LOG_INFO
;
152 if (path
[6] != '\0') {
153 char *priority
= xstrdup(path
);
154 char *facility
= (char *) strchr(priority
, '.');
156 facility
= (char *) strchr(priority
, '|');
160 ll
->syslog_priority
|= syslog_ntoa(facility
);
162 ll
->syslog_priority
|= syslog_ntoa(priority
);
164 if ((ll
->syslog_priority
& PRIORITY_MASK
) == 0)
165 ll
->syslog_priority
|= LOG_INFO
;