[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