Click here to Skip to main content
15,895,256 members
Articles / Mobile Apps

Introduction to NLog

Rate me:
Please Sign up or sign in to vote.
4.94/5 (101 votes)
13 Jul 200617 min read 901.8K   11K   281  
Introduction to managing diagnostic traces with NLog.
<html><head><META http-equiv="Content-Type" content="text/html; charset=utf-8"><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="NAnt 0.85 style task"><meta name="keywords" content="NLog logging tracing debugging library easy simple C# .NET log4net log4j Logger C/C++ COM"><title>NLog - Reference</title></head><body width="100%"><div class="titleimage" style="overflow: hidden"><img src="NLog.jpg"></div><table class="page" cellpadding="0" cellspacing="0"><tr><td valign="top" class="controls" rowspan="2"><table border="0" cellpadding="0" cellspacing="0"><tr><td class="nav"><a class="nav" href="index.html">Introduction</a></td></tr><tr><td class="nav"><a class="nav" href="news.html">News</a></td></tr><tr><td class="nav"><a class="nav" href="tutorial.html">Tutorial</a></td></tr><tr><td class="nav"><a class="nav" href="benchmark.html">Benchmark</a></td></tr><tr><td class="nav"><a class="nav" href="howto.html">How To...</a></td></tr><tr><td class="nav"><a class="nav" href="api.html">Logging API</a></td></tr><tr><td class="nav_selected"><a class="nav_selected" href="reference.html">Reference</a><table class="submenu" width="100%"><tr><td><a class="subnav_selected">Targets</a></td></tr><tr><td><a class="subnav" href="layoutrenderers.html">Layout Renderers</a></td></tr><tr><td><a class="subnav" href="filters.html">Filters</a></td></tr><tr><td><a class="subnav" href="config.html">Configuration File</a></td></tr></table></td></tr><tr><td class="nav"><a class="nav" href="download.html">Download</a></td></tr><tr><td class="nav"><a class="nav" href="technical.html">Technical Information</a></td></tr><tr><td class="nav"><a class="nav" href="mailinglists.html">Mailing Lists</a></td></tr><tr><td class="nav"><a class="nav" href="faq.html">FAQ</a></td></tr><tr><td class="nav"><a class="nav" href="blog.html">Blog</a></td></tr><tr><td class="nav"><a class="nav" href="links.html">Links</a></td></tr></table><p></p><p style="border: 1px solid #c0c0c0; background-color: white; padding: 4px; font-size: 13px; color: red; font-weight: bold">Important information for users of NLog versions 0.2 and 0.5! Click <a href="releasenotes.html">here</a>.</p><a href="http://www.cenqua.com/clover.net"><img src="http://www.cenqua.com/images/cloverednet1.gif" width="89" height="33" border="0" alt="Code Coverage by Clover.NET"></a><p></p><script type="text/javascript" language="javascript">
var sc_project=575077; 
var sc_partition=4; 
var sc_security="6fe22c9a"; 
</script><script type="text/javascript" language="javascript" src="http://www.statcounter.com/counter/counter.js"></script><noscript><a href="http://www.statcounter.com/" target="_blank"><img src="http://c5.statcounter.com/counter.php?sc_project=575077&amp;java=0&amp;security=6fe22c9a" alt="website tracking" border="0"></a></noscript><br><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=116456&amp;type=1" width="88" height="31" border="0" alt="SourceForge.net Logo"></a></td><td valign="top" align="left" class="content"><h1>Log Targets</h1>
        The following log targets are available:
        <div class="noborder" style="width: 600px"><table><tr><td class="label"><a href="#ASPNetTrace">ASPNetTrace</a></td><td class="description"> Writes logging messages to the ASP.NET trace. </td></tr><tr><td class="label"><a href="#Console">Console</a></td><td class="description"> Writes logging messages to the console. </td></tr><tr><td class="label"><a href="#Database">Database</a></td><td class="description"> Writes logging messages to the database using an ADO.NET provider. </td></tr><tr><td class="label"><a href="#Debug">Debug</a></td><td class="description"> Counts logging messages but does not output them anywhere. </td></tr><tr><td class="label"><a href="#File">File</a></td><td class="description"> Writes logging messages to one or more files. </td></tr><tr><td class="label"><a href="#Memory">Memory</a></td><td class="description"> Writes logging messages to an ArrayList in memory for programmatic retrieval. </td></tr><tr><td class="label"><a href="#MessageBox">MessageBox</a></td><td class="description"> Pops up logging messages as message boxes. </td></tr><tr><td class="label"><a href="#MethodCall">MethodCall</a></td><td class="description"> Calls the specified static method on each logging message and passes contextual parameters to it. </td></tr><tr><td class="label"><a href="#Network">Network</a></td><td class="description"> Sends logging messages over network. </td></tr><tr><td class="label"><a href="#NLogViewer">NLogViewer</a></td><td class="description"> Sends logging messages to the remote instance of NLog Viewer. NOT OPERATIONAL YET. </td></tr><tr><td class="label"><a href="#Null">Null</a></td><td class="description"> Discards logging messages optionally forcing the layouts to be calculated. Used mainly for debugging and benchmarking. </td></tr><tr><td class="label"><a href="#OutputDebugString">OutputDebugString</a></td><td class="description"> Outputs logging messages through the <code>OutputDebugString()</code> Win32 API. </td></tr><tr><td class="label"><a href="#Trace">Trace</a></td><td class="description"> Sends logging messages through System.Diagnostics.Trace </td></tr></table></div><hr><h2><a name="ASPNetTrace">ASPNetTrace</a></h2> Writes logging messages to the ASP.NET trace. <p></p><h5>Remarks</h5><remarks> Resulting log entries can be viewed by navigating to http://server/path/Trace.axd </remarks><p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>ASPNetTrace</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span class="required">Layout</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The text to be rendered. <br><p>Default value is: <code>${longdate}|${level:uppercase=true}|${logger}|${message}</code>.</p></td></tr></table><h5>Remarks:</h5><remarks> Resulting log entries can be viewed by navigating to http://server/path/Trace.axd </remarks><hr><h2><a name="Console">Console</a></h2> Writes logging messages to the console. <p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>Console</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span class="required">Layout</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The text to be rendered. <br><p>Default value is: <code>${longdate}|${level:uppercase=true}|${logger}|${message}</code>.</p></td></tr><tr><td class="parametername"><span>Error</span></td><td class="parametervalue"> Send the logging messages to the standard error instead of the standard output. <br><p>Default value is: <code>False</code>.</p></td></tr></table><hr><h2><a name="Database">Database</a></h2> Writes logging messages to the database using an ADO.NET provider. <p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>Database</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span class="required">CommandText</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The text of the SQL command to be run on each log level. <br><h5>Remarks</h5><p><remarks> Typically this is a SQL INSERT statement or a stored procedure call. It should use the database-specific parameters (marked as <code>@parameter</code> for SQL server or <code>:parameter</code> for Oracle, other data providers have their own notation) and not the layout renderers, because the latter is prone to SQL injection attacks. The layout renderers should be specified as &lt;parameters /&gt;&gt; instead. </remarks></p></td></tr><tr><td class="parametername"><span class="required">DBProvider</span></td><td class="parametervalue"> The name of the database provider. It can be: <code>sqlserver, mssql, microsoft, msde</code> (all for MSSQL database), <code>oledb, odbc</code> or other name in which case it's treated as a fully qualified type name of the data provider *Connection class. <br><p>Default value is: <code>sqlserver</code>.</p></td></tr><tr><td class="parametername"><span>ConnectionString</span></td><td class="parametervalue"> The connection string. When provided, it overrides the values specified in DBHost, DBUserName, DBPassword, DBDatabase. <br></td></tr><tr><td class="parametername"><span>DBDatabase</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The database name. If the ConnectionString is not provided this value will be used to construct the "Database=" part of the connection string. <br></td></tr><tr><td class="parametername"><span>DBHost</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The database host name. If the ConnectionString is not provided this value will be used to construct the "Server=" part of the connection string. <br></td></tr><tr><td class="parametername"><span>DBPassword</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The database password. If the ConnectionString is not provided this value will be used to construct the "Password=" part of the connection string. <br></td></tr><tr><td class="parametername"><span>DBUserName</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The database user name. If the ConnectionString is not provided this value will be used to construct the "User ID=" part of the connection string. <br></td></tr><tr><td class="parametername"><span>KeepConnection</span></td><td class="parametervalue"> Keep the database connection open between the log events. <br><p>Default value is: <code>True</code>.</p></td></tr><tr><td class="parametername"><span>UseTransactions</span></td><td class="parametervalue"> Use database transactions. Some data providers require this. <br><p>Default value is: <code>False</code>.</p></td></tr></table><hr><h2><a name="Debug">Debug</a></h2> Counts logging messages but does not output them anywhere. <p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>Debug</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span class="required">Layout</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The text to be rendered. <br><p>Default value is: <code>${longdate}|${level:uppercase=true}|${logger}|${message}</code>.</p></td></tr></table><hr><h2><a name="File">File</a></h2> Writes logging messages to one or more files. <p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>File</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span class="required">FileName</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The name of the file to write to. <br><h5>Remarks</h5><p><remarks> This FileName string is a layout which may include instances of layout renderers. This lets you use a single target to write to multiple files. </remarks></p><h5>Example</h5><p><example> The following value makes NLog write logging events to files based on the log level in the directory where the application runs. <code><pre class="example">${basedir}/${level}.log</pre></code> All <code>Debug</code> messages will go to <code>Debug.log</code>, all <code>Info</code> messages will go to <code>Info.log</code> and so on. You can combine as many of the layout renderers as you want to produce an arbitrary log file name. </example></p></td></tr><tr><td class="parametername"><span class="required">Layout</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The text to be rendered. <br><p>Default value is: <code>${longdate}|${level:uppercase=true}|${logger}|${message}</code>.</p></td></tr><tr><td class="parametername"><span>AutoFlush</span></td><td class="parametervalue"> Automatically flush the file buffers after each log message. <br><p>Default value is: <code>True</code>.</p></td></tr><tr><td class="parametername"><span>BufferSize</span></td><td class="parametervalue"> Log file buffer size in bytes. <br><p>Default value is: <code>32768</code>.</p></td></tr><tr><td class="parametername"><span>ConcurrentWriteAttemptDelay</span></td><td class="parametervalue"> The delay in milliseconds to wait before attempting to write to the file again. <br><p>Default value is: <code>1</code>.</p><h5>Remarks</h5><p><remarks> The actual delay is a random value between 0 and the value specified in this parameter. On each failed attempt the delay base is doubled up to <code>P:NLog.Targets.FileTarget.ConcurrentWriteAttempts</code> times. </remarks></p><h5>Example</h5><p><example> Assuming that ConcurrentWriteAttemptDelay is 10 the time to wait will be:<p></p> a random value between 0 and 10 milliseconds - 1st attempt<br> a random value between 0 and 20 milliseconds - 2nd attempt<br> a random value between 0 and 40 milliseconds - 3rd attempt<br> a random value between 0 and 80 milliseconds - 4th attempt<br> ...<p></p> and so on. </example></p></td></tr><tr><td class="parametername"><span>ConcurrentWriteAttempts</span></td><td class="parametervalue"> The number of times the write is appended on the file before NLog discards the log message. <br><p>Default value is: <code>10</code>.</p></td></tr><tr><td class="parametername"><span>ConcurrentWrites</span></td><td class="parametervalue"> Enables concurrent writes to the log file by multiple processes. <br><p>Default value is: <code>True</code>.</p><h5>Remarks</h5><p><remarks> This prevents the log files from being kept open and makes NLog retry file writes until a write succeeds. This allows for logging in multiprocess environment. </remarks></p></td></tr><tr><td class="parametername"><span>CreateDirs</span></td><td class="parametervalue"> Create directories if they don't exist. <br><p>Default value is: <code>False</code>.</p></td></tr><tr><td class="parametername"><span>Encoding</span></td><td class="parametervalue"> File encoding.<br><h5>Remarks</h5><p><remarks> Can be any encoding name supported by System.Text.Encoding.GetEncoding() e.g. <code>windows-1252</code>, <code>iso-8859-2</code>. </remarks></p></td></tr><tr><td class="parametername"><span>KeepFileOpen</span></td><td class="parametervalue"> Keep log file open instead of opening and closing it on each logging event. <br><p>Default value is: <code>False</code>.</p><h5>Remarks</h5><p><remarks> Setting this property to <code>True</code> helps improve performance but is not recommended in multithreaded or multiprocess scenarios because the file is kept locked and other processes cannot write to it which effectively prevents logging. </remarks></p></td></tr></table><hr><h2><a name="Memory">Memory</a></h2> Writes logging messages to an ArrayList in memory for programmatic retrieval. <p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>Memory</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span class="required">Layout</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The text to be rendered. <br><p>Default value is: <code>${longdate}|${level:uppercase=true}|${logger}|${message}</code>.</p></td></tr></table><hr><h2><a name="MessageBox">MessageBox</a></h2> Pops up logging messages as message boxes. <p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>MessageBox</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span class="required">Layout</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The text to be rendered. <br><p>Default value is: <code>${longdate}|${level:uppercase=true}|${logger}|${message}</code>.</p></td></tr><tr><td class="parametername"><span>Caption</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> Message box title. <br></td></tr></table><hr><h2><a name="MethodCall">MethodCall</a></h2> Calls the specified static method on each logging message and passes contextual parameters to it. <p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>MethodCall</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span class="required">Layout</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The text to be rendered. <br><p>Default value is: <code>${longdate}|${level:uppercase=true}|${logger}|${message}</code>.</p></td></tr><tr><td class="parametername"><span>ClassName</span></td><td class="parametervalue"> The class name. <br></td></tr><tr><td class="parametername"><span>MethodName</span></td><td class="parametervalue"> The method name. The method must be public and static. <br></td></tr></table><hr><h2><a name="Network">Network</a></h2> Sends logging messages over network. <p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>Network</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span class="required">Layout</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The text to be rendered. <br><p>Default value is: <code>${longdate}|${level:uppercase=true}|${logger}|${message}</code>.</p></td></tr><tr><td class="parametername"><span>Address</span></td><td class="parametervalue"> The network address. Can be tcp://host:port, udp://host:port, http://host:port or https://host:port <br></td></tr><tr><td class="parametername"><span>Async</span></td><td class="parametervalue"> Use asynchronous sending routine. <br></td></tr><tr><td class="parametername"><span>KeepConnection</span></td><td class="parametervalue"> Keep connection open whenever possible. <br><p>Default value is: <code>True</code>.</p></td></tr><tr><td class="parametername"><span>NewLine</span></td><td class="parametervalue"> Append newline at the end of log message. <br><p>Default value is: <code>False</code>.</p></td></tr></table><hr><h2><a name="NLogViewer">NLogViewer</a></h2> Sends logging messages to the remote instance of NLog Viewer. NOT OPERATIONAL YET. <p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>NLogViewer</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span>Address</span></td><td class="parametervalue"> The network address. Can be tcp://host:port, udp://host:port, http://host:port or https://host:port <br></td></tr><tr><td class="parametername"><span>AppInfo</span></td><td class="parametervalue"> The AppInfo field. By default it's the friendly name of the current AppDomain. <br></td></tr><tr><td class="parametername"><span>Async</span></td><td class="parametervalue"> Use asynchronous sending routine. <br></td></tr><tr><td class="parametername"><span>IncludeCallSite</span></td><td class="parametervalue"> Include call site (class and method name) in the information sent over the network. <br></td></tr><tr><td class="parametername"><span>IncludeSourceInfo</span></td><td class="parametervalue"> Include source info (file name and line number) in the information sent over the network. <br></td></tr><tr><td class="parametername"><span>KeepConnection</span></td><td class="parametervalue"> Keep connection open whenever possible. <br><p>Default value is: <code>True</code>.</p></td></tr><tr><td class="parametername"><span>NewLine</span></td><td class="parametervalue"> Append newline at the end of log message. <br><p>Default value is: <code>False</code>.</p></td></tr></table><hr><h2><a name="Null">Null</a></h2> Discards logging messages optionally forcing the layouts to be calculated. Used mainly for debugging and benchmarking. <p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>Null</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span class="required">Layout</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The text to be rendered. <br><p>Default value is: <code>${longdate}|${level:uppercase=true}|${logger}|${message}</code>.</p></td></tr><tr><td class="parametername"><span>FormatMessage</span></td><td class="parametervalue"> Perform layout calculation. <br><p>Default value is: <code>False</code>.</p></td></tr></table><hr><h2><a name="OutputDebugString">OutputDebugString</a></h2> Outputs logging messages through the <code>OutputDebugString()</code> Win32 API. <p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>OutputDebugString</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span class="required">Layout</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The text to be rendered. <br><p>Default value is: <code>${longdate}|${level:uppercase=true}|${logger}|${message}</code>.</p></td></tr></table><hr><h2><a name="Trace">Trace</a></h2> Sends logging messages through System.Diagnostics.Trace <p></p><h5>Configuration file usage:</h5><code class="config">&lt;target name="..." type="<b><u>Trace</u></b>"
            ... 
            /&gt;
        </code><h5>Parameters:</h5><table><tr><td class="parametername"><span class="required">Layout</span><br><a href="layoutrenderers.html"><span class="acceptslayout" title="This parameter accepts layout specification. Click here to learn more about layouts.">${}</span></a></td><td class="parametervalue"> The text to be rendered. <br><p>Default value is: <code>${longdate}|${level:uppercase=true}|${logger}|${message}</code>.</p></td></tr></table></td></tr><tr><td class="copyright">Copyright © 2003-2005 by Jarosław Kowalski</td></tr></table></body></html>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Software Developer (Senior)
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions