[ovs-dev] [PATCH] tests: Don't log to syslog during tests.

Ben Pfaff blp at ovn.org
Thu Aug 9 22:41:13 UTC 2018


Thanks.  I folded that in and applied this to master.

Maybe some of your series is cleanups or improvements.  If so, please
feel free to re-send those parts of it.

On Thu, Aug 09, 2018 at 05:02:29PM +0300, Ilya Maximets wrote:
> 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