NLog не входит в базу данных, когда настроен на вход из кода - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть следующее консольное приложение, которое реализует ведение журнала, используя NLog, используя программную конфигурацию. В настоящее время он не входит в базу данных, а также не выдает никаких исключений во время его работы. Кто-нибудь, пожалуйста, дайте мне знать причину этого?

using NLog;
using NLog.Config;
using NLog.Targets;
using System;

namespace Test.Logger
{
    class Program
    {
        static void Main(string[] args)
        {
            var logConfig = new LoggingConfiguration();


            //dbtarget 2
            var dbTarget2 = new DatabaseTarget();
            dbTarget2.ConnectionString = "SomeConnectionString";
            dbTarget2.CommandText = @"INSERT INTO [dbo].[LogAppDetail]
                                                   ([LogAppIS]
                                                   ,[LogAppId]
                                                   ,[DN]
                                                   ,[DV])
                                             VALUES
                                                   (@LogAppIS
                                                   ,@LogAppId
                                                   ,@DN
                                                   ,@DV)";

            dbTarget2.Parameters.Add(new DatabaseParameterInfo("@LogAppIS", new NLog.Layouts.SimpleLayout("${event-properties:LogAppIS}")));
            dbTarget2.Parameters.Add(new DatabaseParameterInfo("@LogAppId", new NLog.Layouts.SimpleLayout("${event-properties:LogAppId}")));
            dbTarget2.Parameters.Add(new DatabaseParameterInfo("@DN", new NLog.Layouts.SimpleLayout("${event-properties:DN}")));
            dbTarget2.Parameters.Add(new DatabaseParameterInfo("@DV", new NLog.Layouts.SimpleLayout("${event-properties:DV}")));

            logConfig.AddTarget("dbTarget2", dbTarget2);
            // add rules
            var rule2 = new LoggingRule("LogAppDetail", LogLevel.Trace, dbTarget2);
            logConfig.LoggingRules.Add(rule2);
            LogManager.Configuration = logConfig;

            LogEventInfo theEvent = new LogEventInfo(LogLevel.Debug, "", "Pass my custom value");
            theEvent.Properties["LogAppIS"] = "12345698";
            theEvent.Properties["LogAppId"] = "1235";
            theEvent.Properties["DN"] = "DN";
            theEvent.Properties["DV"] = "DV";
            var log = NLog.LogManager.GetLogger("LogAppDetail");
            log.Log(theEvent);
        }
    }
}

1 Ответ

0 голосов
/ 01 мая 2018

Я выяснил причину, по которой вышеуказанный код не входил в базу данных. Мне не хватало пакета system.data.sqlclient в моем основном проекте .net. Я понял это, включив следующие исключения в приложении.

LogManager.ThrowExceptions = true;
LogManager.ThrowConfigExceptions = true;
...