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

Ben Pfaff blp at ovn.org
Wed Aug 8 23:04:56 UTC 2018


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
-- 
2.16.1



More information about the dev mailing list