nlog appender for kafka which provides the custom topics pattern and partitions
- .NET 5, 6 and 7
- .NET Core 2 and 3
- .NET Standard 2.0+
- .NET Framework 4.5 - 4.8
Step 1: Install NLog.Targets.KafkaAppender package from nuget.org
Install via Package-Manager Install-Package NLog.Targets.KafkaAppender
Install via .NET CLI dotnet add package NLog.Targets.KafkaAppender
<?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"
autoReload="true">
<extensions>
<add assembly="NLog.Targets.KafkaAppender"/>
</extensions>
<targets>
<target xsi:type="KafkaAppender"
name="kafka"
topic="${callsite:className=true:fileName=false:includeSourcePath=false:methodName=true}"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}"
brokers="localhost:9092"
async="false"
sslCertificateLocation=""
securityProtocol="plaintext"
>
</target>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="kafka" />
</rules>
</nlog>
Param Name | Variable Type | Requirement | Description | Default | Possible values |
---|---|---|---|---|---|
name | :string |
yes* |
Target's name | ||
topic | :layout |
yes* |
Topic pattern can be layout | ${logger} |
|
layout | :layout |
no | Layout used to format log messages. | `${longdate} | ${level:uppercase=true} |
brokers | :string |
yes* |
Kafka brokers with comma-separated | ||
async | :boolean |
no | Async or sync mode | false |
|
sslCertificateLocation | :string |
no | Path to ssl certificate | ||
sslCaLocation | :string |
no | Path to ssl CA certificate | ||
sslKeyLocation | :string |
no | Path to ssl key file | ||
sslKeyPassword | :string |
no | Ssl key password | ||
securityProtocol | :enum |
no | Protocol used to communicate with brokers | plaintext |
Plaintext Ssl SaslPlaintext SaslSsl |
messageTimeoutMs | :int |
no | Limits the time a produced message waits for successful delivery | ||
SaslMechanism | :enum |
no | SASL mechanism to use for authentication. | Gssapi Plain ScramSha256 ScramSha512 OAuthBearer |
Gssapi |
SaslUsername | :string |
no | Simple Authentication and Security Layer Username | ||
SaslPassword | :string |
no | Simple Authentication and Security Layer Password |
Check documentation about all Layout Renderers
Scenario: using Confluent Cloud http://developer.confluent.io/get-started/dotnet/#configuration
<?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"
autoReload="true">
<extensions>
<add assembly="NLog.Targets.KafkaAppender"/>
</extensions>
<targets>
<target xsi:type="KafkaAppender"
name="kafka"
topic="${callsite:className=true:fileName=false:includeSourcePath=false:methodName=true}"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}"
brokers="localhost:9092"
async="false"
securityProtocol="SaslPlaintext"
SaslMechanism="Plain"
SaslUsername="API-Key"
SaslPassword="API-secret"
>
</target>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="kafka" />
</rules>
</nlog>
using System;
namespace NLog.Targets.KafkaAppender.Test
{
class Program
{
static void Main(string[] args)
{
var logger = NLog.LogManager.GetCurrentClassLogger();
logger.Error("hello world");
//topic layout: ${callsite:className=true:fileName=false:includeSourcePath=false:methodName=true}
//message layout: ${longdate}|${level:uppercase=true}|${logger}|${message}
//topic output: NLog.Targets.KafkaAppender.Test.Program.Main
//message output: 2018-12-05 18:27:46.7382|ERROR|NLog.Targets.KafkaAppender.Test.Program|hello world
}
}
}