LogReceiverService target

jogivanknobi edited this page Nov 17, 2017 · 6 revisions
Clone this wiki locally

Sends log messages to a NLog Receiver Service (using WCF or Web Services).

Supported in .NET, Silverlight, Compact Framework and Mono.

Configuration Syntax

<targets>
  <target xsi:type="LogReceiverService"
          name="String"
          endpointConfigurationName="String"
          endpointAddress="String"
          useBinaryEncoding="Boolean"
          clientId="Layout"
          includeEventProperties="Boolean">
    <parameter layout="Layout" name="String" type="System.Type"/><!-- repeated -->
  </target>
</targets>

Read more about using the Configuration File.

Parameters

General Options

  • name - Name of the target.

Connection Options

  • endpointConfigurationName - Name of the endpoint configuration in WCF configuration file.

  • endpointAddress - Endpoint address. Required.

Payload Options

  • useBinaryEncoding - Indicates whether to use binary message encoding. Boolean

  • parameters - The list of parameters. Collection
    Each collection item is represented by <parameter /> element with the following attributes:

    • layout - Layout that should be use to calcuate the value for the parameter. Layout Required.
    • name - Name of the parameter.
    • type - Type of the parameter.System.Type
  • clientId - Client ID. Layout

  • includeEventProperties - Indicates whether to include per-event properties in the payload sent to the server. Boolean

Examples

Passing Parameters

Parameters are passed to the WCF LogReceiverService target using one or more configuration lines such as:

<parameter name="MyParameter" layout="My Value!" />
<parameter name="nlogdir" layout="${nlogdir}" />

These parameters are passed over the network to the service and can be accessed by emitting events from your receiver application.

Application for receiving events

namespace MyLogReceiverApp
{
   using System;
   using NLog;
   using NLog.LogReceiverService;

   /// <summary>
   /// Log service server object that logs messages.
   /// </summary>
   public class LogReceiverServer : ILogReceiverServer
   {
       public void ProcessLogMessages(NLogEvents nevents)
       {
           var events = nevents.ToEventInfo("Client.");
           Console.WriteLine("in: {0} {1}", nevents.Events.Length, events.Count);

           foreach (var ev in events)
           {
               var logger = LogManager.GetLogger(ev.LoggerName);
               logger.Log(ev);
           }
       }
   }
}

The line:

logger.Log(ev);

emits each event to the appropriate targets defined in the server side NLog.config file.

Accessing Custom Values

On the server side NLog.config file, you may use the ${event-properties} layout renderer to access any parameters passed from the client side config. A line such as:

<target name="c" xsi:type="ColoredConsole" layout="testing ${event-properties:item=MyParameter}" />

would print to the console:

testing My Value!