1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML>
<HEAD><style> A { color:black }</style>
<!-- hennerik CVSweb $Revision: 1.93 $ -->
<TITLE>code/nel/doc/logging.dxt - view - 1.2</TITLE></HEAD>
<BODY BGCOLOR="#eeeeee">
<table width="100%" border=0 cellspacing=0 cellpadding=1 bgcolor="#aaaaaa"><tr valign=bottom><td><a href="logging.dxt?sortby=date"><IMG SRC="/inc/img/picto-up.gif" ALT="[BACK]" BORDER="0" WIDTH="14" HEIGHT="13"></a> <b>Return to <A HREF="logging.dxt?sortby=date">logging.dxt</A>
CVS log</b> <IMG SRC="/inc/img/picto-news.gif" ALT="[TXT]" BORDER="0" WIDTH="13" HEIGHT="15"></td><td align=right><IMG SRC="/inc/img/picto-dir.gif" ALT="[DIR]" BORDER="0" WIDTH="15" HEIGHT="13"> <b>Up to <a href="/cvs/cvsweb.cgi/?sortby=date">Nevrax</a> / <a href="/cvs/cvsweb.cgi/code/?sortby=date">code</a> / <a href="/cvs/cvsweb.cgi/code/nel/?sortby=date">nel</a> / <a href="/cvs/cvsweb.cgi/code/nel/doc/?sortby=date">doc</a></b></td></tr></table><HR noshade><table width="100%"><tr><td bgcolor="#ffffff">File: <a href="/cvs/cvsweb.cgi/?sortby=date">Nevrax</a> / <a href="/cvs/cvsweb.cgi/code/?sortby=date">code</a> / <a href="/cvs/cvsweb.cgi/code/nel/?sortby=date">nel</a> / <a href="/cvs/cvsweb.cgi/code/nel/doc/?sortby=date">doc</a> / <a href="/cvs/cvsweb.cgi/code/nel/doc/logging.dxt?sortby=date">logging.dxt</a> (<A HREF="/cvs/cvsweb.cgi/~checkout~/code/nel/doc/logging.dxt?rev=1.2&sortby=date" target="cvs_checkout" onClick="window.open('/cvs/cvsweb.cgi/~checkout~/code/nel/doc/logging.dxt?rev=1.2','cvs_checkout','resizeable,scrollbars');"><b>download</b></A>)<BR>
Revision <B>1.2</B>, <i>Fri Dec 8 10:08:59 2000 UTC</i> (19 months, 2 weeks ago) by <i>cado</i>
<BR>Branch: <b>MAIN</b>
<BR>Changes since <b>1.1: +8 -1
lines</b><PRE>
no message
</PRE>
</td></tr></table><HR noshade><PRE>/**
\page log_howto How to log information ?
\author Olivier Cado
This document explains how to log some information (into the screen, into a file or to a logging server), e.g. in order to debug your code.
You need to include the following header files : "nel/misc/debug.h" "nel/misc/log.h".
\subsection init_log Initialization
In the initialization of your service (see NLNET::IService), attach some displayers to the global NLMISC::CLog objects
\e ErrorLog, \e WarningLog, \e InfoLog, \e DebugLog and \e AssertLog.
NLMISC::CStdDisplayer is for the screen (and VC++ debug window). It is attached by default to all of the five logger objects mentionned above.
NLMISC::CFileDisplayer is for a file.
NLMISC::CMsgBoxDisplayer is for a message box.
NLNET::CNetDisplayer is for a logging server (see CLogService in the server documentation)
If your program is not a service (i.e. it is not inherited from NLNET::IService),
don't forget to call \b NLMISC::InitDebug() at the beginning of your program, otherwise
the logging functions won't work.
Example :
\code
NLMISC::InitDebug(); // if your program does not inherit from NLNET::IService
NLNET::CNetDisplayer *nd = new CNetDisplayer(); // the address of the Logging Server is automatically retrieved using the Naming Service
if ( nd->connected() ) // this line is optional: here we don't want the displayer to attempt other connections if the first one failed
{
NLMISC::DebugLog.addDisplayer( nd );
}
\endcode
\subsection use_log Logging information
In your code, use the macros : \e nlerror, \e nlwarning, \e nlinfo, \e nldebug with a variable number of arguments.
You have to include the header "nel/misc/debug.h".
Example :
\code
nldebug( "Toto is %d years old", age );
if ( age < 0 )
{
nlerror( "Invalid age for toto : %d", age );
return -1;
}
\endcode
- How to log a string without repeating the header ?
The macros nldebug() and nlerror() call some methods of NLMISC::CLog, including displayNL().
It prints a string with an information header.
If you don't want to print the header, use the others methods of NLMISC::CLog.
Example :
\code
NLMISC::DebugLog.displayNL ( "Dump of Values :" );
for ( int j=0; j!=height; ++j )
{
for ( int i=0; i!=width; ++i )
{
NLMISC::DebugLog.displayRaw( "%d ", Values[j][i] );
}
NLMISC::DebugLog.displayRawNL( ": line %d", j );
}
\endcode
\subsection Analysing network transfers
NLNET::NetLog (declared in "nel/net/nel_log.h") is a special logger that allows to send output and input logs to a logging server.
These logs are produced by the network subsystem and have a special syntax so that an analyser can process them and display the transfers
graphically in real-time.
By default, all services (see NLNET::IService) send this kind of logs if they find a logging server.
*/
</PRE>
|