Added a man page for yaz-log (7)
[yaz-moved-to-github.git] / doc / yaz-log-man.xml
diff --git a/doc/yaz-log-man.xml b/doc/yaz-log-man.xml
new file mode 100644 (file)
index 0000000..c2126bb
--- /dev/null
@@ -0,0 +1,239 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+<!-- $Id: yaz-log-man.xml,v 1.1 2004-11-23 14:11:03 heikki Exp $ -->
+<refentry id="yaz-log">
+ <refmeta>
+  <refentrytitle>yaz-log</refentrytitle>
+  <manvolnum>7</manvolnum>
+ </refmeta>
+ <refnamediv>
+  <refname>yaz-log</refname>
+  <refpurpose>Log handling in all yaz-based programs</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+  <cmdsynopsis>
+   <command>yaz-XXXX</command>
+   <arg choice="opt"><option>-v <replaceable>loglevel,...</replaceable></option></arg>
+   <arg choice="opt"><option>-l <replaceable>logfile</replaceable></option></arg>
+  </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1><title>DESCRIPTION</title>
+  <para>
+   All YAZ-based programs use a common log subsystem, and should support
+   common command line options for controlling it. This man page documents
+   those.
+  </para>
+  <para>
+  </para>
+ </refsect1>
+ <refsect1><title>OPTIONS</title>
+  
+  <variablelist>
+   <varlistentry>
+    <term>-l<replaceable> logfile</replaceable></term>
+    <listitem><para>
+      Specify the file where the log is to be written. If none is specified,
+      <filename>stderr</filename> is used. The log is appended to this file.
+      If the file grows overly large, it is silently rotated: It is renamed to
+      <replaceable>logfile</replaceable>.1 (old such file is deleted), and a
+      new file is opened. The limit defaults to 1GB, but can be set by the
+      program.
+    </para></listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>-v<replaceable> loglevel</replaceable></term>
+    <listitem><para>
+      Specify the logging level. The argument is a set of log level names,
+      separated by commas (no whitespace!), optionally preceded by a '-' to
+      negate that level. Most programs have their own default, often
+      containing <literal>fatal,warn,log</literal>, and some
+      application-specific values. The default list can be cleared with the
+      word <literal>none</literal>, or individual bits can be removed by
+      prefixing them with a dash '-'.
+     </para></listitem>
+   </varlistentry>
+
+  </variablelist>
+ </refsect1>
+
+ <refsect1><title>LOG LEVELS TO CONTROL LOGGING</title>
+  <para>
+   Some of the log levels control the way the log is written. 
+  </para>
+  <para>
+   <literal>flush</literal> causes the log to be flushed after every write.
+   This can have serious implications to performance, and should not be used
+   in production. On the other hand, when debugging a program crash, this can
+   be extremely useful. The option <literal>debug</literal> implies
+   <literal>flush</literal> as well.
+  </para>
+  <para>
+   <literal>notime</literal> prevents the writing of time stamps. This is
+   intended for automatic test scripts, which should produce predictable log
+   files that are easy to compare.
+  </para>
+  
+ </refsect1> 
+
+ <refsect1><title>GENERAL LOG LEVELS IN YAZ ITSELF</title>
+  <para>
+   YAZ itself uses the following log levels:
+  </para>
+  <para>
+   <literal>fatal</literal> for fatal errors, that prevent further execution
+   of the program.
+  </para>
+  <para>
+   <literal>warn</literal> for warnings about things that should be corrected.
+  </para>
+  <para>
+   <literal>debug</literal> for debugging. This flag may be used temporarily
+   when developing or debugging yaz, or a program that uses yaz. It is
+   practically deprecated, you should be defining and using your own log
+   levels (see below).
+  </para>
+  <para>
+   <literal>all</literal> turns on almost all hard-coded log levels. 
+  </para>
+  <para>
+   <literal>loglevel</literal> logs information about the log levels used by
+   the program. Every time the log level is changed, lists all bits that are
+   on. Every time a module asks for its log bits, this is logged. This can be
+   used for getting an idea of what log levels are available in any program
+   that uses yaz-log. Start the program with <literal>-v
+   none,loglevel</literal>, and do some common operations with it. Another way
+   is to grep for <function>yaz_log_module_level</function> in the source
+   code, as in
+   <screen>
+      find . -name '*.[ch]' -print | 
+         xargs grep yaz_log_module_level | 
+         grep '"' |
+         cut -d'"' -f2 | 
+         sort -u   
+   </screen>
+  </para>
+  <para>
+   <literal>eventl</literal>, <literal>malloc</literal>, 
+   <literal>nmem</literal>, <literal>odr</literal> are used internally for
+   debugging yaz.
+  </para>
+  <para>
+  </para>
+ </refsect1> 
+
+ <refsect1><title>LOG LEVELS FOR CLIENTS</title>
+  <para>
+   <literal>zoom</literal> logs the calls to the zoom API, which may be useful
+   in debugging client applications.
+  </para>
+ </refsect1> 
+
+ <refsect1><title>LOG LEVELS FOR SERVERS</title>
+  <para>
+   <literal>server</literal> logs the server functions on a high level,
+   starting up, listening on a port, etc.
+  </para>
+  <para>
+   <literal>session</literal> logs individual sessions (connections).
+  </para>
+  <para>
+   <literal>request</literal> logs a one-liner for each request (init, search,
+   etc).
+  </para>
+  <para>
+   <literal>requestdetail</literal> logs the details of every request, before
+   it is passed to the back-end, and the results received from it.
+  </para>
+  <para>
+   Each server program (zebra, etc) is supposed to define its own log levels
+   in addition to these. As they depend on the server in question, they can
+   not be described here. See above how to find out about them.
+  </para>
+ </refsect1> 
+
+ <refsect1><title>EXAMPLES</title>
+  <para>
+   See what log levels yaz-ztest is using:
+   <screen>
+    yaz-ztest -1 -v none,loglevel
+    14:43:29-23/11 [loglevel] Setting log level to 4096 = 0x00001000
+    14:43:29-23/11 [loglevel] Static  log bit 00000001 'fatal' is off
+    14:43:29-23/11 [loglevel] Static  log bit 00000002 'debug' is off
+    14:43:29-23/11 [loglevel] Static  log bit 00000004 'warn' is off
+    14:43:29-23/11 [loglevel] Static  log bit 00000008 'log' is off
+    14:43:29-23/11 [loglevel] Static  log bit 00000080 'malloc' is off
+    14:43:29-23/11 [loglevel] Static  log bit 00000800 'flush' is off
+    14:43:29-23/11 [loglevel] Static  log bit 00001000 'loglevel' is ON
+    14:43:29-23/11 [loglevel] Static  log bit 00002000 'server' is off
+    14:43:29-23/11 [loglevel] Dynamic log bit 00004000 'session' is off
+    14:43:29-23/11 [loglevel] Dynamic log bit 00008000 'request' is off
+    14:44:13-23/11 yaz-ztest [loglevel] returning log bit 0x4000 for 'session'
+    14:44:13-23/11 yaz-ztest [loglevel] returning log bit 0x2000 for 'server'
+    14:44:13-23/11 yaz-ztest [loglevel] returning NO log bit for 'eventl'
+    14:44:20-23/11 yaz-ztest [loglevel] returning log bit 0x4000 for 'session'
+    14:44:20-23/11 yaz-ztest [loglevel] returning log bit 0x8000 for 'request'
+    14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'requestdetail'
+    14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'odr'
+    14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'ztest'
+   </screen>
+  </para>
+  <para>
+   See the details of the requests for yaz-ztest
+   <screen>
+   ./yaz-ztest -1 -v requestdetail
+   14:45:35-23/11 yaz-ztest [server] Adding static Z3950 listener on tcp:@:9999
+   14:45:35-23/11 yaz-ztest [server] Starting server ./yaz-ztest pid=32200
+   14:45:38-23/11 yaz-ztest [session] Starting session from tcp:127.0.0.1 (pid=32200)
+   14:45:38-23/11 yaz-ztest [requestdetail] Got initRequest
+   14:45:38-23/11 yaz-ztest [requestdetail] Id:        81
+   14:45:38-23/11 yaz-ztest [requestdetail] Name:      YAZ
+   14:45:38-23/11 yaz-ztest [requestdetail] Version:   2.0.28
+   14:45:38-23/11 yaz-ztest [requestdetail] Negotiated to v3: srch prst del extendedServices namedresults scan sort
+   14:45:38-23/11 yaz-ztest [request] Init from 'YAZ' (81) (ver 2.0.28) OK
+   14:45:39-23/11 yaz-ztest [requestdetail] Got SearchRequest.
+   14:45:39-23/11 yaz-ztest [requestdetail] ResultSet '1'
+   14:45:39-23/11 yaz-ztest [requestdetail] Database 'Default'
+   14:45:39-23/11 yaz-ztest [requestdetail] RPN query. Type: Bib-1
+   14:45:39-23/11 yaz-ztest [requestdetail]  term 'foo' (general)
+   14:45:39-23/11 yaz-ztest [requestdetail] resultCount: 7
+   14:45:39-23/11 yaz-ztest [request] Search Z: @attrset Bib-1 foo  OK:7 hits
+   14:45:41-23/11 yaz-ztest [requestdetail] Got PresentRequest.
+   14:45:41-23/11 yaz-ztest [requestdetail] Request to pack 1+1 1
+   14:45:41-23/11 yaz-ztest [requestdetail] pms=1048576, mrs=1048576
+   14:45:41-23/11 yaz-ztest [request] Present: [1] 1+1  OK 1 records returned
+   </screen> 
+  </para>
+ </refsect1> 
+
+ <refsect1><title>FILES</title>
+  <para>
+   <filename><replaceable>prefix</replaceable>/include/yaz/ylog.h</filename>
+   <filename><replaceable>prefix</replaceable>/src/log.c</filename>
+  </para>
+ </refsect1>
+ <refsect1><title>SEE ALSO</title>
+  <para>
+   yaz(7)
+   yaz-ztest(8) yaz-client(1) 
+  </para>
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-local-catalogs: nil
+sgml-namecase-general:t
+End:
+-->