- Notifications
You must be signed in to change notification settings - Fork1.4k
NLog config Example
Rolf Kristensen edited this pageMay 31, 2025 ·14 revisions
Save this file as "nlog.config" in the root of your application (Add to project withCopy if newer)
<?xml version="1.0" encoding="utf-8" ?><nlogxmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"> autoReload="true" internalLogLevel="Warn" internalLogFile="${basedir}/nlog-internal.txt"> <variablename="defaultLayout"value="${longdate}|${level}|${message:withException=true}" /> <targets> <targetname="logfile"xsi:type="File"fileName="file.txt"layout="${defaultLayout}" /> <targetname="console"xsi:type="ColoredConsole"layout="${defaultLayout}" /> </targets> <rules> <loggername="*"minlevel="Debug"writeTo="logfile" /> <loggername="*"minlevel="Info"writeTo="console" /> </rules></nlog>
<?xml version="1.0" encoding="utf-8" ?><nlogxmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"> autoReload="true" internalLogLevel="Warn" internalLogFile="${basedir}/logs/nlog-internal.txt"> <variablename="gmailUsername"value="${trim-whitespace:${file-contents:${basedir}/gmailusername.txt}}" /> <variablename="gmailPassword"value="${trim-whitespace:${file-contents:${basedir}/gmailpassword.txt}}" /> <extensions><!-- load NLog.Web to enable ASP.NET-specific functionality--> <addassembly="NLog.Web" /> </extensions><!-- define various log targets--> <targets><!-- write logs to file--> <targetxsi:type="File"name="file"fileName="${basedir}/logs/${shortdate}.log"layout="${longdate} ${aspnet-request:servervariable=URL} ${uppercase:${level}} ${message}" /><!-- write log message to database--> <targetxsi:type="Database"name="db"><!-- SQL command to be executed for each entry--> <commandText>INSERT INTO [LogEntries](TimeStamp, Message, Level, Logger) VALUES(getutcdate(), @msg, @level, @logger)</commandText><!-- parameters for the command--> <parametername="@msg"layout="${message}" /> <parametername="@level"layout="${level}" /> <parametername="@logger"layout="${logger}" /><!-- connection string--> <dbProvider>System.Data.SqlClient</dbProvider> <connectionString>server=.\SQLEXPRESS;database=MyLogs;integrated security=sspi</connectionString><!-- commands to install database--> <install-command> <text>CREATE DATABASE MyLogs</text> <connectionString>server=.\SQLEXPRESS;database=master;integrated security=sspi</connectionString> <ignoreFailures>true</ignoreFailures> </install-command> <install-command> <text> CREATE TABLE LogEntries( id int primary key not null identity(1,1), TimeStamp datetime2, Message nvarchar(max), level nvarchar(10), logger nvarchar(128)) </text> </install-command><!-- commands to uninstall database--> <uninstall-command> <text>DROP DATABASE MyLogs</text> <connectionString>server=.\SQLEXPRESS;database=master;integrated security=sspi</connectionString> <ignoreFailures>true</ignoreFailures> </uninstall-command> </target><!-- log message to event log--> <targetxsi:type="EventLog"name="eventLog"source="NLog Demo"layout="${message}${newline}Call site: ${callsite:className=true:methodName=true}${newline}Logger: ${logger}"> </target><!-- increase the performance counter--> <targetxsi:type="PerfCounter"name="pc1"categoryName="My Log"counterName="My Counter"> </target><!-- send mail through GMail server--> <targetxsi:type="Mail"name="mail"smtpServer="smtp.gmail.com"smtpPort="587"enableSsl="true"smtpAuthentication="Basic"smtpUserName="${gmailUsername}"smtpPassword="${gmailPassword}"from="${gmailUsername}"to="${gmailUsername}"subject="NLogDemo logs"addNewLines="true" /><!-- send mail asynchronously, so that it does not block the calling thread--> <wrapper-targetxsi:type="AsyncWrapper"name="asyncMail"> <target-refname="mail"/> </wrapper-target> <wrapper-targetxsi:type="AspNetBufferingWrapper"name="allOutputs"> <wrapper-targetxsi:type="PostFilteringWrapper"> <compound-targetxsi:type="SplitGroup"> <target-refname="file" /> <target-refname="db" /> <target-refname="eventLog" /> <target-refname="pc1" /> <target-refname="asyncMail" /> </compound-target><!-- during normal execution only log Info messages--> <defaultFilter>level >= LogLevel.Info</defaultFilter><!-- if there is at least one error, log everything from trace level--> <whenexists="level >= LogLevel.Error"filter="level >= LogLevel.Trace" /> </wrapper-target> </wrapper-target> </targets> <rules> <loggername="*"minlevel="Trace"writeTo="allOutputs" /> </rules></nlog>
-Troubleshooting Guide - See available NLog Targets and Layouts:https://nlog-project.org/config
- All targets, layouts and layout renderers
Popular: - Using NLog with NLog.config
- Using NLog with appsettings.json