Gelf4NLog is an [NLog] target implementation to push log messages to [GrayLog2].
Branch: develop
Clone or download
GokGokalp Update
Readme updated.
Latest commit 02f3e50 May 18, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
NLog.Web.AspNetCore.Targets.Gelf.ConsoleRunner Some updates & refactoring... May 18, 2018
NLog.Web.AspNetCore.Targets.Gelf.Tests adding MappedDiagnosticsLogicalContext data to gelf message May 3, 2018
NLog.Web.AspNetCore.Targets.Gelf Some updates & refactoring... May 18, 2018
.gitattributes first commit Jun 18, 2017
.gitignore first commit Jun 18, 2017
NLog.Web.AspNetCore.Targets.Gelf.1.1.0.nuspec Some updates & refactoring... May 18, 2018 Update May 18, 2018
build.ps1 first commit Jun 18, 2017
docker-compose.yml Some updates & refactoring... May 18, 2018


Gelf4NLog is an NLog target implementation to push log messages to GrayLog2. It implements the Gelf specification and communicates with GrayLog server via UDP.

NuGet version


Code forked from which is a fork from who forked the origonal code from

I transformed the project to .NET Core.


Use Nuget:

$ dotnet add package NLog.Web.AspNetCore.Targets.Gelf


Here is a sample nlog.config configuration file for graylog:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns=""
    <add assembly="NLog.Web.AspNetCore"/>
    <add assembly="NLog.Web.AspNetCore.Targets.Gelf"/>
    <target xsi:type="File" name="debugFile" filename="C:\@Logs\${shortdate}-${level}-${applicationName}.txt" layout="${longdate}|${level:upperCase=true}|${logger}|${aspnet-Request-Method}|url: ${aspnet-Request-Url}${aspnet-Request-QueryString}|${message}" concurrentWrites="false" />
    <target xsi:type="Gelf" name="graylog" endpoint="udp://" facility="console-runner" SendLastFormatParameter="true">
	<!-- Optional parameters -->
	<parameter name="param1" layout="${longdate}"/>
	<parameter name="param2" layout="${callsite}"/>
    <logger name="*" minlevel="Debug" writeTo="debugFile, graylog" />

Options are the following:

  • name: arbitrary name given to the target
  • xsi:type: set this to "gelf"
  • endpoint: the uri pointing to the graylog2 input in the format udp://{IP or host name}:{port} note: support is currently only for udp transport protocol
  • facility: The graylog2 facility to send log messages
  • sendLastFormatParameter: default false. If true last parameter of message format will be sent to graylog as separate field per property


//excerpt from ConsoleRunner
var eventInfo = new LogEventInfo
					Message = comic.Title,
					Level = LogLevel.Info,
eventInfo.Properties.Add("Publisher", comic.Publisher);
eventInfo.Properties.Add("ReleaseDate", comic.ReleaseDate);

or alternatively for simple log messages

Logger.Info("Simple message {0}", value);

or alternatively for use of sendLastFormatParameter

Logger.Info(comic.Title, new { Publisher = comic.Publisher, ReleaseDate = comic.ReleaseDate });

will log Publisher and ReleaseDate as separate fields in Graylog