Click here to Skip to main content
11,437,816 members (37,355 online)
Click here to Skip to main content

How to NLog (2.1 & 3.1) with VisualStudio 2013

, 6 Oct 2014 CPOL
Rate this:
Please Sign up or sign in to vote.
This will let you start logging quickly with VS2013 and NLog.

You can just download and run these to see how they work.

Note: For a smaller download, I removed the packages from the solution, so the first time you build it, it'll download them from NuGet.


I've been trying to hit the ground running using NLog in order to log messages to the console and/or a file, but ran into wall after wall of things not working. There are plenty of tutorials and blogs and what not, suggesting you do this or that, but most of that data is rather outdated (ranging from 2006 to 2010?), so in order to save others some time, here's the quick setup to get you up and running with NLog and VisualStudio 2013.

Step 1: Open VS2013, Create a New Console Project

Nothing fancy. Name it as you wish, put it where you want.

  • For bonus points: print "hello world!" to the console.

Step 2: Get NLog from NuGet

Go to "Tools -> NuGet PackageManager -> Manage NuGet Packages for Solution ..."

Step 2.1: Get the NLog package

Simple as 1..2..3... Search, point the mouse, click.

Note: Current version is 3.1. This tutorial works just as well with it.

Step 2.2: Get the NLog Configuration

Here's where things deviate a bit from the tutorials I've seen. You'll need to manually add the NLog configurations (which will install the NLog schema as well for you) to your packages:

Without this, you won't be able to do much and you'll get frustrating errors like this:

The reason is (like it suggests) that it can't find the schema. The why is beyond me, but installing the configuration manually will add the needed NLog.xsd schema file and let you code away happily ever after.

NOTE: On NLog 3.1, installing the configuration will install the Schema, but you won't see it in the installed packages. Don't worry, it's still there Smile | :) .

Step 3: Edit your NLog Config

The previous steps should have created a configuration file in your solution called NLog.config. Open it, and have a look inside, it should look like:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns=""
    <!-- add your targets here -->
    <target xsi:type="File" 
            layout="${longdate} ${uppercase:${level}} ${message}" />

    <!-- add your logging rules here -->
    <logger name="*" minlevel="Trace" writeTo="f" />

Remove the comments from the default target and rules, and you are ready to start logging to a file.

Step 3.1 Extra Points

If you want to log to the console, you could replace the above (or add, to log to both) with: To your targets section:

<target  xsi:type="Console" 
            layout="${shortdate} ${level} ${message}" />

And to your rules section:

<logger name="*" minlevel="Trace" writeTo="console" />

For bonus points, change the Console above with ColoredConsole, and log different types to see the results Smile | :) .

Step 4: Edit Your Main Method

You can simply copy / paste this into your main:

static void Main(string[] args)
    * Welcome to this NLog demo
    Console.Out.WriteLine("Greetings, some loggings is about to take place.");

    * This creates your logger. 
    * Notice that in the config file we defined that everything should go into the file.
    * (and if you set the console, it'll output to it as well).
    Logger logger = LogManager.GetCurrentClassLogger();

      Console.Out.WriteLine("Let's assume you're going to work, and using the bus to get there:");
      logger .Trace("Trace: The chatter of people on the street");
      logger .Debug("Debug: Where are you going and why?");
      logger .Info("Info: What bus station you're at.");
      logger .Warn("Warn: You're playing on the phone and not looking up for your bus");
      logger .Error("Error: You get on the wrong bus.");
      logger .Fatal("Fatal: You are run over by the bus.");
     * Closing app
    Console.Out.WriteLine("Done logging.");
    Console.Out.WriteLine("Hit any key to exit");

If you followed all the above advice, you should see something like this:

Extracurricular Activity

Log Levels (Plus Story and Example)

The individuals involved:
You: A male typical IT person. SO: Your female Significant Other. BGFF: Your SO's Best Gay Friend Forever.

The Scenario:
You have been dragged into some dress shopping with your SO & her BGFF.

NLog supports the following log levels:

  • Trace - Very detailed logs, which may include high-volume information such as protocol payloads. This log level is typically only enabled during development
    • All the chatter between SO & BGFF about the different shades of pink and how they might or might not match the shoes.
  • Debug - Debugging information, less detailed than trace, typically not enabled in production environment.
    • Your SO emotional level. Influenced usually by the day of month, and how her last chat with her mother ended.
  • Info - Information messages, which are normally enabled in production environment
    • Which store are you at.
  • Warn - Warning messages, typically for non-critical issues, which can be recovered or which are temporary failures
    • Your SO asks: "Does my ass look fat in this?"
  • Error - error messages
    • You hesitate before answering.
  • Fatal - very serious errors
    • You answer the above question wrongly.

I've based the article above on several articles and examples from the net.

The Official Tutorial

  • - I simply got frustrated , since it seems rather outdated, and wouldn't work for me. You don't have an EXE installer, and you can't get the Empty NLog Configuration File to work, since it doesn't exist.

CodeProject Tutorial

  • Introduction to NLog - This article has lots of information and would go into the details of what you can do with the configuration files. I highly suggest reading it to get a hang of what's possible with NLog. If you do try to copy code from it, you might need to take care with the casing, for example: change filename TO fileName (that tutorial is 8 years old, and aimed at NLog 1 I think ... ).

Layout Renderes


Log Viewers

You can install some external log views if you want. They will save you looking into the files, or console, by catching the messages and printing them out in a GUI of your choice.


I found [Sentinel] to work. It's not very recent (2011), not very clear (on the set up), but after adding the needed config (they have an example on the site), it's quite straight forward.

For future reference and ease, add to your <targets> section:

 <target xsi:type="NLogViewer"

Add to your <rules> section:

 <logger name="*"
            writeTo="viewer" />

For some reason [Harvester] doesn't seem to work for me.

Some extra research, and here's how to make harvester work for you as well:

Add this above the <targets>:

        <add assembly="Harvester.Integration.NLog, Version=, Culture=neutral, PublicKeyToken=2335e074c59acad6"/>

Then add this to the <targets> section:

    <target xsi:type="Harvester" 
            binding ="\\.\pipe\Harvester" 
            mutexName="HarvesterMutex" />

And last, this to your <rules> section:

     <logger name="*" 
            writeTo="Harvester" />

I'm quite sure you can find others out there.


This is a little gem I've found about lately. You can find it here . You can download the free version which is the one I'm using ATM.

In contrast to the two above solutions, BareTail will simply monitor a text file for changes. This means that if you are already logging into a text file, you don't need to add another target or worry about installing another program. Simply run this, point it to the text file, and it will monitor it.

It has an option to Follow Tail, which mean it will keep scrolling down when the file grows, and you can easily set the highlights color for any text pattern you want, so you can easily keep tab on whatever you find important for you.

More Articles

Wrap Up

I can't believe there wasn't a single place with all this information to get a quick start logging started. Note that you can also define your loggers in code (look at the CodeProject article I linked above), but I find the configuration (once they work) to be quite easy to work with. I hope this will help you to get up and running with your logging. Feel free to leave comments and vote.


October 6, 2014
  • Updated and tested with NLog 3.1
  • Added BareTail to the log viewers.
  • Changed tracing level on Console from Warn to Trace.
June 16, 2014
  • Thanks for a good spot in the comments, updated "Log.Trace" ... to "logger.Trace" to reflect the correct variable name. (In the download code, it's a bit different, and it's used as "Log" there, being a static global variable).
May 10, 2014
  • Typos
  • Removed packages for smaller download size (NuGet will get them automatically when you first build the project)
May 9, 2014
  • Added Log levels and when to use them
  • Update code with "interactive" demo
April 1, 2014
  • Fixed a typo that might throw an exception
  • Added configuration for Sentinel
  • Added configuration for Harvester
March 26, 2014
  • Initial release


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Software Developer
Australia Australia
Coding since I Remember myself ... went through Basic on Commodore 64 to C# on an 8 core i7... In between worked with c, c++, java, assembler, php, pascal, JScript, SQL based DB's and a bit of NoSQL as well.

Love software, and I'm usually fidgeting around with technology software and hardware on my free time.
Follow on   LinkedIn

Comments and Discussions

QuestionError / Missing Step for the NLog.Config Pin
Member 1148011625-Feb-15 10:30
memberMember 1148011625-Feb-15 10:30 
AnswerRe: Error / Missing Step for the NLog.Config Pin
_Noctis_2-Mar-15 1:12
professional_Noctis_2-Mar-15 1:12 
QuestionSchema and NLog.config files Pin
David M Newman14-Jan-15 13:24
memberDavid M Newman14-Jan-15 13:24 
SuggestionMy vote of 5 Pin
Marcin Wronecki16-Jun-14 2:01
memberMarcin Wronecki16-Jun-14 2:01 
GeneralRe: My vote of 5 Pin
_Noctis_16-Jun-14 2:20
member_Noctis_16-Jun-14 2:20 
GeneralMy vote of 5 Pin
Franie9-May-14 6:24
memberFranie9-May-14 6:24 
GeneralRe: My vote of 5 Pin
_Noctis_9-May-14 17:01
member_Noctis_9-May-14 17:01 
Generalmy vote of 5 Pin
Southmountain1-Apr-14 7:08
memberSouthmountain1-Apr-14 7:08 
GeneralRe: my vote of 5 Pin
_Noctis_1-Apr-14 11:30
member_Noctis_1-Apr-14 11:30 
GeneralMy vote of 5 Pin
Volynsky Alex1-Apr-14 6:05
professionalVolynsky Alex1-Apr-14 6:05 
GeneralRe: My vote of 5 Pin
_Noctis_1-Apr-14 11:29
member_Noctis_1-Apr-14 11:29 
GeneralRe: My vote of 5 Pin
Volynsky Alex1-Apr-14 11:44
professionalVolynsky Alex1-Apr-14 11:44 
QuestionNlog is powerful Pin
Member 103011301-Apr-14 5:33
memberMember 103011301-Apr-14 5:33 
AnswerRe: Nlog is powerful Pin
_Noctis_1-Apr-14 11:26
member_Noctis_1-Apr-14 11:26 
Questionmy vote of 5 Pin
Govindaraj Rangaraj1-Apr-14 0:11
memberGovindaraj Rangaraj1-Apr-14 0:11 
AnswerRe: my vote of 5 Pin
_Noctis_1-Apr-14 1:06
member_Noctis_1-Apr-14 1:06 
QuestionNLog Viewer Pin
fauland.cc27-Mar-14 2:01
memberfauland.cc27-Mar-14 2:01 
GeneralMy vote of 5 Pin
Dino.Liu26-Mar-14 2:33
memberDino.Liu26-Mar-14 2:33 
GeneralRe: My vote of 5 Pin
_Noctis_26-Mar-14 3:23
member_Noctis_26-Mar-14 3:23 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.150506.1 | Last Updated 6 Oct 2014
Article Copyright 2014 by _Noctis_
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid