NLog Targets
The beauty of NLog is the Targets ‘system’ that is extentible and easy to use. Also the most amazing thing is the default target list as provided by NLog and the ease with which custom targets can be written. The Targets provided by the Nlog by default are more then sufficient for most needs.
There can be multiple targets that can be linked to multiple Rules.
Well, the currently provided targets as provided by NLog can be accessed here. Some of the most useful targets with sample configuration is as below:
- ColoredConsole: This target adds a ‘beautiful’ Colored logs on the console. Well from the name it applies for Console Applications only.
<targets async="true"> <target name="ConsoleTarget" xsi:type="ColoredConsole" layout="${longdate}, ${level}, ${message}" useDefaultRowHighlightingRules="true"/> </targets>
- File Target: The file target as form the names writes the log to any file. Also, the location of the file could be on the network path as well.
<targets async="true"> <target name="ConsoleTarget" xsi:type="ColoredConsole" layout="${longdate}, ${level}, ${message}" useDefaultRowHighlightingRules="true"/> <target name="fileTarget" xsi:type="File" layout="${longdate}, ${level}, ${message}" fileName="c:\temp\dummyLog_${longdate}.txt" /> <target name="networkFilePath" xsi:type="File" layout="${longdate}, ${level}, ${message}" fileName="\\127.0.0.1\Shared\temp\dummyLog_${machinename}.txt" /> </targets>
There are two targets as defined above, one is normal file in local system and the other one is on network path. The archival options availabel for Files can be seen here
There is also an possiblity to add more advanced options to control file parameters. An example code is given below as:<targets async="true"> <target name="adavancedFileTarget" xsi:type="File" layout="${longdate}, ${level}, ${message}" fileName="c:\temp\log_${level}_${longdate}.txt" header="${headerLayout}" footer="${headerLayout}" archiveAboveSize="1024000000" createDirs="true" /> </targets>
- Debug Target: As the name suggests it writes to the Log sink for the attached debugger (if any :))
<targets async="true"> <target name="debugTarget" xsi:type="Debugger" layout="${longdate}, ${level}, ${message}" /> </targets>
- Trace Target: This also as prev, send the messages to system.Diagnoistics.Trace Listener. This can be useful, if there are any existing trace listeners, and nlog is to be configured to integrate with them.
<targets async="true"> <target name="traceTarget" xsi:type="Trace" layout="${longdate}, ${level}, ${message}" /> </targets>