Add logging support in ASP.NET core to the Pkcs11Interop library

ASP.NET core

Pkcs11Interop is a popular library to interact with the PKCS11 libraries from .NET
https://github.com/Pkcs11Interop/Pkcs11Interop

Here is an exmaple of how to configure logging with it


public class CustomPkcs11InteropLogger<T> : IPkcs11InteropLogger
    {

        private readonly ILogger<T> _logger;

        public CustomPkcs11InteropLogger()
        {
            _logger = Program.CHost.Services.GetService<ILogger<T>>();
        }

        public bool IsEnabled(Pkcs11InteropLogLevel level)
        {
            return true;
        }

        public void Log(Pkcs11InteropLogLevel level, Exception exception, string message, params object[] args)
        {
            LogLevel logLevel = level switch
            {
                Pkcs11InteropLogLevel.Trace => LogLevel.Trace,
                Pkcs11InteropLogLevel.Debug => LogLevel.Debug,
                Pkcs11InteropLogLevel.Info => LogLevel.Information,
                Pkcs11InteropLogLevel.Warn => LogLevel.Warning,
                Pkcs11InteropLogLevel.Error => LogLevel.Error,
                Pkcs11InteropLogLevel.Fatal => LogLevel.Critical,
                Pkcs11InteropLogLevel.None => LogLevel.None,
                _ => LogLevel.None
            };

            _logger.Log(logLevel, exception, message, args);
        }
    }



    public class CustomPkcs11InteropLoggerFactory : IPkcs11InteropLoggerFactory
    {
        public IPkcs11InteropLogger CreateLogger(Type loggerType)
        {
            Type generic = typeof(CustomPkcs11InteropLogger<>);
            Type[] typeArgs = { loggerType };

            Type constructed = generic.MakeGenericType(typeArgs);

            IPkcs11InteropLogger interopLogger = Activator.CreateInstance(constructed) as IPkcs11InteropLogger;
            return interopLogger;
        }
    }

Then, set the factory like this:


CHost = CreateHostBuilder(args).Build();

Pkcs11InteropLoggerFactory.SetLoggerFactory(new CustomPkcs11InteropLoggerFactory());

Post a Comment

Previous Post Next Post