NLog: Configuração programática

O artigo NLog: logging mais fácil faz uma apresentação desta plataforma e exemplifica a sua utilização. A configuração pode ser feita tanto por ficheiro .config como programaticamente.

Aqui exemplifica-se como usar código (C#) para fazer a configuração do NLog.
As mensagens de diagnóstico têm como destino uma Base de Dados SQL Server usando uma Stored Procedure para o efeito recorrendo a um wrapper para escrita assíncrona.

public static class MyLog 
    {
        public static ILogger Logger = LogManager.GetCurrentClassLogger();
        private static readonly string _connect = "data source=(localdb)\MSSQLLocalDB;initial catalog=Pluto_Queries;integrated security=True;MultipleActiveResultSets=True;";

        public static void SetDatabaseTarget()
        {
            SetTargetConfiguration();
 
            LogManager.ConfigurationReloaded += (sender, e) =>
            {
                //Re apply if config reloaded
                SetTargetConfiguration();
            };
        }
 
        private static void SetTargetConfiguration()
        {
            var _config = LogManager.Configuration;
 
            var _dbTarget = new DatabaseTarget("sqlserver")
            {
                DBProvider = @"System.Data.SqlClient",
                ConnectionString = _connect,
                CommandType = System.Data.CommandType.StoredProcedure,
                CommandText = @"[dbo].[Write_Info_Pluto]",
            };

            _dbTarget.Parameters.Add(new DatabaseParameterInfo { Name = "@Path", Layout = "${event-properties:path}" });
            _dbTarget.Parameters.Add(new DatabaseParameterInfo { Name = "@FileName", Layout = "${event-properties:fileName}" });
            _dbTarget.Parameters.Add(new DatabaseParameterInfo { Name = "@OnDate", Layout = "${date}" });
 
            var _asyncTarget = new AsyncTargetWrapper("async-db", _dbTarget);
 
            _config.AddTarget(_asyncTarget);
            _config.AddRuleForOneLevel(LogLevel.Info, _asyncTarget);
 
            LogManager.Configuration = _config;
 
            LogManager.ReconfigExistingLoggers();
        }
 
    }


Invocação
MyLog.Logger.Info("Read directory {path}, file {fileName} ", "<nome da directoria>", "<nome do ficheiro>");



O NLog 4.5 introduz o log estruturado - também conhecido por log semântico. Para mais acerca de como usar o log estruturado, ler aqui.
Informação detalhada acerca da renderização das propriedades do evento de log aqui.


Artigo de interesse: NLog vs log4net vs Serilog: Compare .NET Logging Frameworks pela equipa Stackify
Licença CC BY-SA 4.0 Silvia Pinhão Lopes, 23.10.19
Print Friendly and PDF

Sem comentários:

Com tecnologia do Blogger.