[ovs-dev] [PATCH] tests: Don't log to syslog during tests.
Ilya Maximets
i.maximets at samsung.com
Thu Aug 9 14:02:29 UTC 2018
The patch is good.
The following incremental needed to make it complete:
----
diff --git a/python/ovs/vlog.py b/python/ovs/vlog.py
index d7a84d8..7d416c3 100644
--- a/python/ovs/vlog.py
+++ b/python/ovs/vlog.py
@@ -305,9 +305,11 @@ class Vlog(object):
return
logger = logging.getLogger('syslog')
- # If there is no infrastructure to support python syslog, disable
- # the logger to avoid repeated errors.
- if not os.path.exists("/dev/log"):
+ # Disable the logger if there is no infrastructure to support python
+ # syslog (to avoid repeated errors) or if the "null" syslog method
+ # requested by environment.
+ if not os.path.exists("/dev/log") \
+ or os.environ.get('OVS_SYSLOG_METHOD') == "null":
logger.disabled = True
return
----
With above change, tests leaves the crystal clear syslog.
Beside that,
Acked-by: Ilya Maximets <i.maximets at samsung.com>
On 09.08.2018 02:04, Ben Pfaff wrote:
> Until now, "make check" generated a huge amount of output to syslog. This
> commit suppresses it.
>
> CC: Ilya Maximets <i.maximets at samsung.com>
> Signed-off-by: Ben Pfaff <blp at ovn.org>
> ---
> NEWS | 2 ++
> lib/automake.mk | 2 ++
> lib/syslog-null.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> lib/syslog-null.h | 22 ++++++++++++++++++++
> lib/vlog.c | 12 +++++++++--
> lib/vlog.man | 7 ++++++-
> lib/vlog.xml | 11 +++++++++-
> tests/atlocal.in | 4 ++++
> 8 files changed, 116 insertions(+), 4 deletions(-)
> create mode 100644 lib/syslog-null.c
> create mode 100644 lib/syslog-null.h
>
> diff --git a/NEWS b/NEWS
> index 7875f6673e34..ae21340e9046 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -1,5 +1,7 @@
> 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
> diff --git a/lib/automake.mk b/lib/automake.mk
> index fb43aa1413b2..63e9d72ac18a 100644
> --- a/lib/automake.mk
> +++ b/lib/automake.mk
> @@ -280,6 +280,8 @@ lib_libopenvswitch_la_SOURCES = \
> lib/syslog-direct.h \
> lib/syslog-libc.c \
> lib/syslog-libc.h \
> + lib/syslog-null.c \
> + lib/syslog-null.h \
> lib/syslog-provider.h \
> lib/table.c \
> lib/table.h \
> diff --git a/lib/syslog-null.c b/lib/syslog-null.c
> new file mode 100644
> index 000000000000..9dbd13911c21
> --- /dev/null
> +++ b/lib/syslog-null.c
> @@ -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. */
> +}
> diff --git a/lib/syslog-null.h b/lib/syslog-null.h
> new file mode 100644
> index 000000000000..0f7731dc4dcc
> --- /dev/null
> +++ b/lib/syslog-null.h
> @@ -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 */
> diff --git a/lib/vlog.c b/lib/vlog.c
> index bf5fd88ba9e8..01cfdc5d3d2d 100644
> --- a/lib/vlog.c
> +++ b/lib/vlog.c
> @@ -39,6 +39,7 @@
> #include "svec.h"
> #include "syslog-direct.h"
> #include "syslog-libc.h"
> +#include "syslog-null.h"
> #include "syslog-provider.h"
> #include "timeval.h"
> #include "unixctl.h"
> @@ -584,7 +585,9 @@ vlog_set_syslog_method(const char *method)
> return;
> }
>
> - if (!strcmp(method, "libc")) {
> + if (!strcmp(method, "null")) {
> + syslogger = syslog_null_create();
> + } else if (!strcmp(method, "libc")) {
> syslogger = syslog_libc_create();
> } else if (!strncmp(method, "udp:", 4) || !strncmp(method, "unix:", 5)) {
> syslogger = syslog_direct_create(method);
> @@ -778,7 +781,12 @@ vlog_init(void)
> * log anything before calling ovsthread_once_done() will deadlock. */
> atomic_read_explicit(&log_facility, &facility, memory_order_relaxed);
> 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);
> ovsthread_once_done(&once);
> diff --git a/lib/vlog.man b/lib/vlog.man
> index 674528d79aae..bad80e3d2771 100644
> --- a/lib/vlog.man
> +++ b/lib/vlog.man
> @@ -83,7 +83,7 @@ Specify \fImethod\fR how syslog messages should be sent to syslog daemon.
> Following forms are supported:
> .RS
> .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
> message before it is actually sent to the syslog daemon over \fB/dev/log\fR
> 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
> considerations that apply to UDP sockets, but do not apply to UNIX domain
> sockets.
> +.IP \(bu
> +\fBnull\fR, discards all messages logged to syslog.
> .RE
> +.IP
> +The default is taken from the \fBOVS_SYSLOG_METHOD\fR environment
> +variable; if it is unset, the default is \fBlibc\fR.
> diff --git a/lib/vlog.xml b/lib/vlog.xml
> index 70f88b3a6652..c3afc0492314 100644
> --- a/lib/vlog.xml
> +++ b/lib/vlog.xml
> @@ -114,7 +114,7 @@
> <ul>
> <li>
> <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
> the syslog daemon over <code>/dev/log</code> UNIX domain socket.
> </li>
> @@ -139,6 +139,15 @@
> local syslog traffic and there are some security considerations that
> apply to UDP sockets, but do not apply to UNIX domain sockets.
> </li>
> +
> + <li>
> + <code>null</code>, to discard all messages logged to syslog.
> + </li>
> </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>
> </dl>
> diff --git a/tests/atlocal.in b/tests/atlocal.in
> index 0f4a6ca33758..a86de8bc1b90 100644
> --- a/tests/atlocal.in
> +++ b/tests/atlocal.in
> @@ -212,3 +212,7 @@ unset NO_PROXY
> # Avoid OVN environment variables leaking in from external environment.
> unset OVN_NB_DB
> unset OVN_SB_DB
> +
> +# Prevent logging to syslog during tests.
> +OVS_SYSLOG_METHOD=null
> +export OVS_SYSLOG_METHOD
>
More information about the dev
mailing list