Click here to Skip to main content
Click here to Skip to main content
Go to top

How to NLog (2.1) with VisualStudio 2013

, 9 May 2014
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.

Introduction

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.

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.

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="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 
  <targets>
    <!-- add your targets here -->
  
    <!--
    <target xsi:type="File" 
            name="f" 
            fileName="${basedir}/logs/${windows-identity:domain=false}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
     -->
  </targets>

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

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" 
            name="console" 
            layout="${shortdate} ${level} ${message}" />

And to your rules section:

<logger name="*" minlevel="Warn" 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.");
    Console.Out.WriteLine("");

   /*
    * 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:");
      Console.Out.WriteLine("------------------------------------------------------------------");
      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("");
    Console.Out.WriteLine("Done logging.");
    Console.Out.WriteLine("Hit any key to exit");
    Console.ReadKey();
}

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

  • https://github.com/nlog/nlog/wiki/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

${shortdate}
${logger}
${stacktrace} 

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.

Sentinel

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"
            name="viewer"
            address="udp://127.0.0.1:9999"/> 

Add to your <rules> section:

 <logger name="*"
            minlevel="Debug"
            writeTo="viewer" />
Harvester

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>:

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

Then add this to the <targets> section:

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

And last, this to your <rules> section:

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

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

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.

History

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

License

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

Share

About the Author

_Noctis_
Software Developer
Australia Australia
Coding since I Remeber 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

 
SuggestionMy vote of 5 PinmemberMarcin Wronecki16-Jun-14 1:01 
GeneralRe: My vote of 5 Pinmember_Noctis_16-Jun-14 1:20 
GeneralMy vote of 5 PinmemberFranie9-May-14 5:24 
GeneralRe: My vote of 5 Pinmember_Noctis_9-May-14 16:01 
Generalmy vote of 5 PinmemberSouthmountain1-Apr-14 6:08 
GeneralRe: my vote of 5 Pinmember_Noctis_1-Apr-14 10:30 
GeneralMy vote of 5 PinprofessionalVolynsky Alex1-Apr-14 5:05 
GeneralRe: My vote of 5 Pinmember_Noctis_1-Apr-14 10:29 
GeneralRe: My vote of 5 PinprofessionalVolynsky Alex1-Apr-14 10:44 
QuestionNlog is powerful PinmemberMember 103011301-Apr-14 4:33 
AnswerRe: Nlog is powerful Pinmember_Noctis_1-Apr-14 10:26 
Questionmy vote of 5 PinmemberGovindaraj Rangaraj31-Mar-14 23:11 
AnswerRe: my vote of 5 Pinmember_Noctis_1-Apr-14 0:06 
QuestionNLog Viewer Pinmemberfauland.cc27-Mar-14 1:01 
GeneralMy vote of 5 PinmemberDino.Liu26-Mar-14 1:33 
GeneralRe: My vote of 5 Pinmember_Noctis_26-Mar-14 2: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 | Mobile
Web02 | 2.8.140916.1 | Last Updated 9 May 2014
Article Copyright 2014 by _Noctis_
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid