2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-23 14:57:06 +00:00

tests: Don't log to syslog during tests.

Until now, "make check" generated a huge amount of output to syslog.  This
commit suppresses it.

Acked-by: Ilya Maximets <i.maximets@samsung.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
This commit is contained in:
Ben Pfaff
2018-08-08 16:04:56 -07:00
parent 8aa88fadc4
commit e11f0c258d
9 changed files with 121 additions and 7 deletions

2
NEWS
View File

@@ -1,5 +1,7 @@
Post-v2.10.0 Post-v2.10.0
--------------------- ---------------------
- The environment variable OVS_SYSLOG_METHOD, if set, is now used
as the default syslog method.
v2.10.0 - xx xxx xxxx v2.10.0 - xx xxx xxxx

View File

@@ -280,6 +280,8 @@ lib_libopenvswitch_la_SOURCES = \
lib/syslog-direct.h \ lib/syslog-direct.h \
lib/syslog-libc.c \ lib/syslog-libc.c \
lib/syslog-libc.h \ lib/syslog-libc.h \
lib/syslog-null.c \
lib/syslog-null.h \
lib/syslog-provider.h \ lib/syslog-provider.h \
lib/table.c \ lib/table.c \
lib/table.h \ lib/table.h \

60
lib/syslog-null.c Normal file
View File

@@ -0,0 +1,60 @@
/*
* Copyright (c) 2015, 2016 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "syslog-null.h"
#include <config.h>
#include "compiler.h"
#include "syslog-provider.h"
#include "util.h"
static void syslog_null_open(struct syslogger *this, int facility);
static void syslog_null_log(struct syslogger *this, int pri, const char *msg);
static struct syslog_class syslog_null_class = {
syslog_null_open,
syslog_null_log,
};
struct syslog_null {
struct syslogger parent;
};
/* This function creates object that delegate all logging to null's
* syslog implementation. */
struct syslogger *
syslog_null_create(void)
{
struct syslog_null *this = xmalloc(sizeof *this);
this->parent.class = &syslog_null_class;
this->parent.prefix = "";
return &this->parent;
}
static void
syslog_null_open(struct syslogger *this OVS_UNUSED, int facility OVS_UNUSED)
{
/* Nothing to do. */
}
static void
syslog_null_log(struct syslogger *this OVS_UNUSED, int pri OVS_UNUSED,
const char *msg OVS_UNUSED)
{
/* Nothing to do. */
}

22
lib/syslog-null.h Normal file
View File

@@ -0,0 +1,22 @@
/*
* Copyright (c) 2015 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef SYSLOG_NULL_H
#define SYSLOG_NULL_H 1
struct syslogger *syslog_null_create(void);
#endif /* syslog-null.h */

View File

@@ -39,6 +39,7 @@
#include "svec.h" #include "svec.h"
#include "syslog-direct.h" #include "syslog-direct.h"
#include "syslog-libc.h" #include "syslog-libc.h"
#include "syslog-null.h"
#include "syslog-provider.h" #include "syslog-provider.h"
#include "timeval.h" #include "timeval.h"
#include "unixctl.h" #include "unixctl.h"
@@ -584,7 +585,9 @@ vlog_set_syslog_method(const char *method)
return; return;
} }
if (!strcmp(method, "libc")) { if (!strcmp(method, "null")) {
syslogger = syslog_null_create();
} else if (!strcmp(method, "libc")) {
syslogger = syslog_libc_create(); syslogger = syslog_libc_create();
} else if (!strncmp(method, "udp:", 4) || !strncmp(method, "unix:", 5)) { } else if (!strncmp(method, "udp:", 4) || !strncmp(method, "unix:", 5)) {
syslogger = syslog_direct_create(method); syslogger = syslog_direct_create(method);
@@ -778,7 +781,12 @@ vlog_init(void)
* log anything before calling ovsthread_once_done() will deadlock. */ * log anything before calling ovsthread_once_done() will deadlock. */
atomic_read_explicit(&log_facility, &facility, memory_order_relaxed); atomic_read_explicit(&log_facility, &facility, memory_order_relaxed);
if (!syslogger) { if (!syslogger) {
syslogger = syslog_libc_create(); char *env = getenv("OVS_SYSLOG_METHOD");
if (env && env[0]) {
vlog_set_syslog_method(env);
} else {
syslogger = syslog_libc_create();
}
} }
syslogger->class->openlog(syslogger, facility ? facility : LOG_DAEMON); syslogger->class->openlog(syslogger, facility ? facility : LOG_DAEMON);
ovsthread_once_done(&once); ovsthread_once_done(&once);

View File

@@ -83,7 +83,7 @@ Specify \fImethod\fR how syslog messages should be sent to syslog daemon.
Following forms are supported: Following forms are supported:
.RS .RS
.IP \(bu .IP \(bu
\fBlibc\fR, use libc \fBsyslog()\fR function. This is the default behavior. \fBlibc\fR, use libc \fBsyslog()\fR function.
Downside of using this options is that libc adds fixed prefix to every Downside of using this options is that libc adds fixed prefix to every
message before it is actually sent to the syslog daemon over \fB/dev/log\fR message before it is actually sent to the syslog daemon over \fB/dev/log\fR
UNIX domain socket. UNIX domain socket.
@@ -103,4 +103,9 @@ to listen on the specified UDP port, accidental iptables rules could be
interfering with local syslog traffic and there are some security interfering with local syslog traffic and there are some security
considerations that apply to UDP sockets, but do not apply to UNIX domain considerations that apply to UDP sockets, but do not apply to UNIX domain
sockets. sockets.
.IP \(bu
\fBnull\fR, discards all messages logged to syslog.
.RE .RE
.IP
The default is taken from the \fBOVS_SYSLOG_METHOD\fR environment
variable; if it is unset, the default is \fBlibc\fR.

View File

@@ -114,7 +114,7 @@
<ul> <ul>
<li> <li>
<code>libc</code>, to use the libc <code>syslog()</code> function. <code>libc</code>, to use the libc <code>syslog()</code> function.
This is the default behavior. Downside of using this options is that Downside of using this options is that
libc adds fixed prefix to every message before it is actually sent to libc adds fixed prefix to every message before it is actually sent to
the syslog daemon over <code>/dev/log</code> UNIX domain socket. the syslog daemon over <code>/dev/log</code> UNIX domain socket.
</li> </li>
@@ -139,6 +139,15 @@
local syslog traffic and there are some security considerations that local syslog traffic and there are some security considerations that
apply to UDP sockets, but do not apply to UNIX domain sockets. apply to UDP sockets, but do not apply to UNIX domain sockets.
</li> </li>
<li>
<code>null</code>, to discard all messages logged to syslog.
</li>
</ul> </ul>
<p>
The default is taken from the <code>OVS_SYSLOG_METHOD</code> environment
variable; if it is unset, the default is <code>libc</code>.
</p>
</dd> </dd>
</dl> </dl>

View File

@@ -305,9 +305,11 @@ class Vlog(object):
return return
logger = logging.getLogger('syslog') logger = logging.getLogger('syslog')
# If there is no infrastructure to support python syslog, disable # Disable the logger if there is no infrastructure to support python
# the logger to avoid repeated errors. # syslog (to avoid repeated errors) or if the "null" syslog method
if not os.path.exists("/dev/log"): # requested by environment.
if (not os.path.exists("/dev/log")
or os.environ.get('OVS_SYSLOG_METHOD') == "null"):
logger.disabled = True logger.disabled = True
return return

View File

@@ -212,3 +212,7 @@ unset NO_PROXY
# Avoid OVN environment variables leaking in from external environment. # Avoid OVN environment variables leaking in from external environment.
unset OVN_NB_DB unset OVN_NB_DB
unset OVN_SB_DB unset OVN_SB_DB
# Prevent logging to syslog during tests.
OVS_SYSLOG_METHOD=null
export OVS_SYSLOG_METHOD