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
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 \
--- /dev/null
+/*
+ * 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. */
+}
--- /dev/null
+/*
+ * 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 */
#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"
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);
* 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);
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.
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.
<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>
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>
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
# 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