.NET Core

Enabling logging

The client library has the ability to log useful information that can be used for debug purposes. To enable logging, supply the Direct or Portal client with an implementation of Microsoft.Extensions.Logging.ILoggerFactory. This is Microsoft’s own logging API, and allows the user to chose their own logging framework.

Enabling logging on level DEBUG will output positive results of requests and worse, WARN only failed requests or worse, while ERROR will only occur on failed requests to create a signature job. These loggers will be under the Digipost.Signature.Api.Client namespace.

Implementing using NLog

There are numerous ways to implement a logger, but the following examples will be based on NLog documentation.

  1. Install the Nuget-packages NLog, NLog.Extensions.Logging and Microsoft.Extensions.DependencyInjection.
  2. Create a nlog.config file. The following is an example that logs to file and to console:
<?xml version="1.0" encoding="utf-8"?>

<!-- XSD manual extracted from package NLog.Schema:>
<nlog xmlns="" xsi:schemaLocation="NLog NLog.xsd"
    <!-- the targets to write to -->
        <!-- write logs to file -->
        <target xsi:type="File"
                layout="${date}|${level:uppercase=true}|${message} ${exception}|${logger}|${all-event-properties}"
        <!-- write logs to console -->
        <target xsi:type="Console"
                layout="${date}|${level:uppercase=true}|${message} ${exception}|${logger}|${all-event-properties}" />

    <!-- rules to map from logger name to target -->
        <logger name="*" minlevel="Trace" writeTo="fileTarget,consoleTarget"/>
  1. In your application, do the following to create a logger and supply it to the client:
private static IServiceProvider CreateServiceProviderAndSetUpLogging()
    var services = new ServiceCollection();

    services.AddSingleton<ILoggerFactory, LoggerFactory>();
    services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
    services.AddLogging((builder) => builder.SetMinimumLevel(LogLevel.Trace));

    var serviceProvider = services.BuildServiceProvider();

    return serviceProvider;

private static void SetUpLoggingForTesting(IServiceProvider serviceProvider)
    var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();

    loggerFactory.AddNLog(new NLogProviderOptions {CaptureMessageTemplates = true, CaptureMessageProperties = true});

static void Main(string[] args)
    ClientConfiguration clientConfiguration = null;
    var serviceProvider = CreateServiceProviderAndSetUpLogging();
    var client = new PortalClient(clientConfiguration, serviceProvider.GetService<ILoggerFactory>());

Request and response logging

For initial integration and debugging purposes, it can be useful to log the actual request and response going over the wire. This can be enabled by doing the following:

Set the property ClientConfiguration.LogRequestAndResponse = true.


Enabling request logging should never be used in a production system. It will severely impact the performance of the client.

Logging of document bundle

Logging of document bundle can be enabled via the ClientConfiguration:

var clientConfiguration = new ClientConfiguration(Environment.DifiTest, "3k 7f 30 dd 05 d3 b7 fc...");


Remember to only set the directory to save the disk dump. A new zip file will be placed there for each created signature job.

If you have special needs for the bundle other than just saving it to disk, add your own bundle processor to ClientConfiguration.DocumentBundleProcessors.


Request and response logging


Enabling request logging should never be used in a production system. It will impact the performance of the client.

You may configure the client library to log HTTP requests and responses by calling .enableRequestAndResponseLogging() when creating the client’s configuration. You may configure the logger no.digipost.signature.client.http.requestresponse in order to customize logging. It must be set to at least INFO to write anything to the log.

Writing document bundle to disk

You may configure the client library to write a ZIP file with the document bundle by calling .enableDocumentBundleDiskDump(Path) when creating the client’s configuration.

The Path parameter is the directory to where the files will be written. This directory must exists as the client library won’t try creating it.

If you have needs for the document bundle other than just saving it to disk, add your own document bundle processor by calling .addDocumentBundleProcessor(…) with your own DocumentBundleProcessor when creating the client’s configuration.