blob: 6b4b5f96bdac738cdce3b16e7bdd7eb26ba85805 [file] [log] [blame]
<html lang="en">
<head>
<title>openlog - The GNU C Library</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The GNU C Library">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Submitting-Syslog-Messages.html#Submitting-Syslog-Messages" title="Submitting Syslog Messages">
<link rel="next" href="syslog_003b-vsyslog.html#syslog_003b-vsyslog" title="syslog; vsyslog">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU C library.
This is Edition 0.12, last updated 2007-10-27,
of `The GNU C Library Reference Manual', for version
2.8 (Sourcery G++ Lite 2011.03-41).
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
2003, 2007, 2008, 2010 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software Needs Free Documentation''
and ``GNU Lesser General Public License'', the Front-Cover texts being
``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A
copy of the license is included in the section entitled "GNU Free
Documentation License".
(a) The FSF's Back-Cover Text is: ``You have the freedom to
copy and modify this GNU manual. Buying copies from the FSF
supports it in developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="openlog"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="syslog_003b-vsyslog.html#syslog_003b-vsyslog">syslog; vsyslog</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Submitting-Syslog-Messages.html#Submitting-Syslog-Messages">Submitting Syslog Messages</a>
<hr>
</div>
<h4 class="subsection">18.2.1 openlog</h4>
<p>The symbols referred to in this section are declared in the file
<samp><span class="file">syslog.h</span></samp>.
<!-- syslog.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: void <b>openlog</b> (<var>const char *ident, int option, int facility</var>)<var><a name="index-openlog-2034"></a></var><br>
<blockquote>
<p><code>openlog</code> opens or reopens a connection to Syslog in preparation
for submitting messages.
<p><var>ident</var> is an arbitrary identification string which future
<code>syslog</code> invocations will prefix to each message. This is intended
to identify the source of the message, and people conventionally set it
to the name of the program that will submit the messages.
<p>If <var>ident</var> is NULL, or if <code>openlog</code> is not called, the default
identification string used in Syslog messages will be the program name,
taken from argv[0].
<p>Please note that the string pointer <var>ident</var> will be retained
internally by the Syslog routines. You must not free the memory that
<var>ident</var> points to. It is also dangerous to pass a reference to an
automatic variable since leaving the scope would mean ending the
lifetime of the variable. If you want to change the <var>ident</var> string,
you must call <code>openlog</code> again; overwriting the string pointed to by
<var>ident</var> is not thread-safe.
<p>You can cause the Syslog routines to drop the reference to <var>ident</var> and
go back to the default string (the program name taken from argv[0]), by
calling <code>closelog</code>: See <a href="closelog.html#closelog">closelog</a>.
<p>In particular, if you are writing code for a shared library that might get
loaded and then unloaded (e.g. a PAM module), and you use <code>openlog</code>,
you must call <code>closelog</code> before any point where your library might
get unloaded, as in this example:
<pre class="smallexample"> #include &lt;syslog.h&gt;
void
shared_library_function (void)
{
openlog ("mylibrary", option, priority);
syslog (LOG_INFO, "shared library has been invoked");
closelog ();
}
</pre>
<p>Without the call to <code>closelog</code>, future invocations of <code>syslog</code>
by the program using the shared library may crash, if the library gets
unloaded and the memory containing the string <code>"mylibrary"</code> becomes
unmapped. This is a limitation of the BSD syslog interface.
<p><code>openlog</code> may or may not open the <samp><span class="file">/dev/log</span></samp> socket, depending
on <var>option</var>. If it does, it tries to open it and connect it as a
stream socket. If that doesn't work, it tries to open it and connect it
as a datagram socket. The socket has the &ldquo;Close on Exec&rdquo; attribute,
so the kernel will close it if the process performs an exec.
<p>You don't have to use <code>openlog</code>. If you call <code>syslog</code> without
having called <code>openlog</code>, <code>syslog</code> just opens the connection
implicitly and uses defaults for the information in <var>ident</var> and
<var>options</var>.
<p><var>options</var> is a bit string, with the bits as defined by the following
single bit masks:
<dl>
<dt><code>LOG_PERROR</code><dd>If on, <code>openlog</code> sets up the connection so that any <code>syslog</code>
on this connection writes its message to the calling process' Standard
Error stream in addition to submitting it to Syslog. If off, <code>syslog</code>
does not write the message to Standard Error.
<br><dt><code>LOG_CONS</code><dd>If on, <code>openlog</code> sets up the connection so that a <code>syslog</code> on
this connection that fails to submit a message to Syslog writes the
message instead to system console. If off, <code>syslog</code> does not write
to the system console (but of course Syslog may write messages it
receives to the console).
<br><dt><code>LOG_PID</code><dd>When on, <code>openlog</code> sets up the connection so that a <code>syslog</code>
on this connection inserts the calling process' Process ID (PID) into
the message. When off, <code>openlog</code> does not insert the PID.
<br><dt><code>LOG_NDELAY</code><dd>When on, <code>openlog</code> opens and connects the <samp><span class="file">/dev/log</span></samp> socket.
When off, a future <code>syslog</code> call must open and connect the socket.
<p><strong>Portability note:</strong> In early systems, the sense of this bit was
exactly the opposite.
<br><dt><code>LOG_ODELAY</code><dd>This bit does nothing. It exists for backward compatibility.
</dl>
<p>If any other bit in <var>options</var> is on, the result is undefined.
<p><var>facility</var> is the default facility code for this connection. A
<code>syslog</code> on this connection that specifies default facility causes
this facility to be associated with the message. See <code>syslog</code> for
possible values. A value of zero means the default default, which is
<code>LOG_USER</code>.
<p>If a Syslog connection is already open when you call <code>openlog</code>,
<code>openlog</code> &ldquo;reopens&rdquo; the connection. Reopening is like opening
except that if you specify zero for the default facility code, the
default facility code simply remains unchanged and if you specify
LOG_NDELAY and the socket is already open and connected, <code>openlog</code>
just leaves it that way.
<!-- There is a bug in closelog() (glibc 2.1.3) wherein it does not reset the -->
<!-- default log facility to LOG_USER, which means the default default log -->
<!-- facility could be whatever the default log facility was for a previous -->
<!-- Syslog connection. I have documented what the function should be rather -->
<!-- than what it is because I think if anyone ever gets concerned, the code -->
<!-- will change. -->
</blockquote></div>
</body></html>