mirror of
https://github.com/samba-team/samba.git
synced 2025-03-27 22:50:26 +03:00
lib/util: Add "debug syslog format = always", which logs to stdout in syslog style
Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
parent
33effa76d6
commit
83fe7a0316
@ -146,7 +146,7 @@ static int file_log_setup(TALLOC_CTX *mem_ctx,
|
||||
const char *app_name)
|
||||
{
|
||||
struct debug_settings settings = {
|
||||
.debug_syslog_format = true,
|
||||
.debug_syslog_format = DEBUG_SYSLOG_FORMAT_ALWAYS,
|
||||
.debug_hires_timestamp = true,
|
||||
.debug_no_stderr_redirect = true,
|
||||
};
|
||||
|
@ -1,16 +1,28 @@
|
||||
<samba:parameter name="debug syslog format"
|
||||
context="G"
|
||||
type="boolean"
|
||||
type="enum"
|
||||
enumlist="enum_debug_syslog_format"
|
||||
xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
|
||||
<description>
|
||||
<para>
|
||||
With this option enabled, debug messages are printed in a
|
||||
With this option enabled (<constant>yes</constant> (alias
|
||||
<constant>in_logs</constant>) or
|
||||
<constant>always</constant>), debug messages are printed in a
|
||||
single-line format like that traditionally produced by syslog.
|
||||
The timestamp consists of an abbreviated month, space-padded date,
|
||||
and time including seconds. This is followed by the hostname and
|
||||
the program name, with the process-ID in square brackets.
|
||||
</para>
|
||||
|
||||
<para>The value <constant>always</constant> produces this log
|
||||
format even to <constant>STDOUT</constant> or
|
||||
<constant>STDERR</constant>
|
||||
</para>
|
||||
|
||||
<para>The value <constant>no</constant> defers to other parameters
|
||||
and typically produces traditional two-line Samba logs to log files.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If <smbconfoption name="debug hires timestamp"/> is also enabled
|
||||
then an RFC5424 timestamp is used instead.
|
||||
|
@ -418,6 +418,18 @@ static const struct enum_list enum_spotlight_backend[] = {
|
||||
{-1, NULL}
|
||||
};
|
||||
|
||||
static const struct enum_list enum_debug_syslog_format[] = {
|
||||
{DEBUG_SYSLOG_FORMAT_NO, "No"},
|
||||
{DEBUG_SYSLOG_FORMAT_NO, "False"},
|
||||
{DEBUG_SYSLOG_FORMAT_NO, "0"},
|
||||
{DEBUG_SYSLOG_FORMAT_IN_LOGS, "in_logs"},
|
||||
{DEBUG_SYSLOG_FORMAT_IN_LOGS, "Yes"},
|
||||
{DEBUG_SYSLOG_FORMAT_IN_LOGS, "True"},
|
||||
{DEBUG_SYSLOG_FORMAT_IN_LOGS, "1"},
|
||||
{DEBUG_SYSLOG_FORMAT_ALWAYS, "always"},
|
||||
{-1, NULL}
|
||||
};
|
||||
|
||||
/* Note: We do not initialise the defaults union - it is not allowed in ANSI C
|
||||
*
|
||||
* NOTE: Handling of duplicated (synonym) parameters:
|
||||
|
@ -1557,10 +1557,25 @@ void check_log_size( void )
|
||||
static void Debug1(const char *msg, size_t msg_len)
|
||||
{
|
||||
int old_errno = errno;
|
||||
enum debug_logtype logtype = state.logtype;
|
||||
|
||||
debug_count++;
|
||||
|
||||
switch(state.logtype) {
|
||||
if (state.settings.debug_syslog_format == DEBUG_SYSLOG_FORMAT_ALWAYS) {
|
||||
switch(state.logtype) {
|
||||
case DEBUG_STDOUT:
|
||||
case DEBUG_STDERR:
|
||||
case DEBUG_DEFAULT_STDOUT:
|
||||
case DEBUG_DEFAULT_STDERR:
|
||||
/* Behave the same as logging to a file */
|
||||
logtype = DEBUG_FILE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch(logtype) {
|
||||
case DEBUG_CALLBACK:
|
||||
debug_callback_log(msg, msg_len, current_msg_level);
|
||||
break;
|
||||
@ -1749,23 +1764,31 @@ bool dbghdrclass(int level, int cls, const char *location, const char *func)
|
||||
|
||||
dbgsetclass(level, cls);
|
||||
|
||||
/* Don't print a header if we're logging to stdout. */
|
||||
if ( state.logtype != DEBUG_FILE ) {
|
||||
return( true );
|
||||
/*
|
||||
* Don't print a header if we're logging to stdout,
|
||||
* unless 'debug syslog format = always'
|
||||
*/
|
||||
if (state.logtype != DEBUG_FILE &&
|
||||
state.settings.debug_syslog_format != DEBUG_SYSLOG_FORMAT_ALWAYS)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Print the header if timestamps are turned on. If parameters are
|
||||
* not yet loaded, then default to timestamps on.
|
||||
/*
|
||||
* Print the header if timestamps (or debug syslog format) is
|
||||
* turned on. If parameters are not yet loaded, then default
|
||||
* to timestamps on.
|
||||
*/
|
||||
if (!(state.settings.timestamp_logs ||
|
||||
state.settings.debug_prefix_timestamp ||
|
||||
state.settings.debug_syslog_format)) {
|
||||
state.settings.debug_syslog_format != DEBUG_SYSLOG_FORMAT_NO))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
GetTimeOfDay(&tv);
|
||||
|
||||
if (state.settings.debug_syslog_format) {
|
||||
if (state.settings.debug_syslog_format != DEBUG_SYSLOG_FORMAT_NO) {
|
||||
if (state.settings.debug_hires_timestamp) {
|
||||
timeval_str_buf(&tv, true, true, &tvbuf);
|
||||
} else {
|
||||
|
@ -325,12 +325,18 @@ enum debug_logtype {
|
||||
DEBUG_CALLBACK = 5
|
||||
};
|
||||
|
||||
enum debug_syslog_format {
|
||||
DEBUG_SYSLOG_FORMAT_NO = 0,
|
||||
DEBUG_SYSLOG_FORMAT_IN_LOGS = 1,
|
||||
DEBUG_SYSLOG_FORMAT_ALWAYS = 2,
|
||||
};
|
||||
|
||||
struct debug_settings {
|
||||
size_t max_log_size;
|
||||
bool timestamp_logs;
|
||||
bool debug_prefix_timestamp;
|
||||
bool debug_hires_timestamp;
|
||||
bool debug_syslog_format;
|
||||
enum debug_syslog_format debug_syslog_format;
|
||||
bool debug_pid;
|
||||
bool debug_uid;
|
||||
bool debug_class;
|
||||
|
Loading…
x
Reference in New Issue
Block a user