ASP.NET Core 2.1 Использование конфигурации Nlog в качестве .NET MVC5 - PullRequest
0 голосов
/ 01 октября 2018

У меня есть эта конфигурация NLog, которая была настроена, когда мой проект использовал .NET MVC 5. Он использовался для правильной регистрации, пока я не перенес этот код в ASP.NET Core 2.1.Теперь он вообще ничего не будет регистрировать.

App.ClassLibrary> LoggingSettings.cs

public class LoggingSettings
{
    public static void ConfigureLogger()
    {
        var logConfig = new LoggingConfiguration();
        var consoleTarget = new ColoredConsoleTarget();
        consoleTarget.Layout = consoleTarget.Layout = @"${date:format=HH\:mm\:ss} ${logger} ${message} ${mdc:item=AppName} ${mdc:item=UserName}";
        logConfig.AddTarget("console", consoleTarget);

        var dbTarget = new DatabaseTarget();
        dbTarget.ConnectionString = DatabaseGlobals.ConnectionString;

        dbTarget.CommandText = @"
            INSERT INTO [dbo].[AspNetEventLogs]
            ([Application]
            ,[Logged]
            ,[Level]
            ,[Message]
            ,[UserName]
            ,[ServerName]
            ,[Port]
            ,[Url]
            ,[Https]
            ,[ServerAddress]
            ,[Logger]
            ,[Callsite]
            ,[Exception])
                VALUES (
            @application,
            @logged,
            @level,
            @message,
            @UserName,
            @serverName,
            @port,
            @url,
            @https,
            @serverAddress,
            @logger,
            @callSite,
            @exception
            )
        ";
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@Application", "${mdc:item=AppName}"));
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@Logged", "${date}"));
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@Level", "${level}"));
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@Message", "${message}"));
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@Username", "${identity}"));
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@ServerName", "n/a"));
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@Port", "n/a"));
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@Url", "n/a"));
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@Https", "0"));
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@ServerAddress", "n/a"));
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@Logger", "${logger}"));
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@CallSite", "${callsite}"));
        dbTarget.Parameters.Add(new DatabaseParameterInfo("@Exception", "${exception:tostring"));

        var rule = new LoggingRule("*", LogLevel.Debug, dbTarget);
        logConfig.LoggingRules.Add(rule);

        LogManager.Configuration = logConfig;
    }
}

App.ClassLibrary> LoggingController.cs

public class LoggingController : Logger
{
    public void ConfigureLogger()
    {
        LoggingSettings.ConfigureLogger();
    }

    public void SetApplicationName(String Name)
    {
        MappedDiagnosticsContext.Set("AppName", Name);
    }
}

Мой контроллерЗатем упоминается, когда я хочу записать любые записи в базу данных.Пример его ссылки приведен здесь:

App.Data> ApplicationUsersData

Вот как я его инициализирую

private readonly LoggingController logger = (LoggingController)LogManager.GetCurrentClassLogger(typeof(LoggingController));

public ApplicationUsersData(ApplicationDbContext dbContext)
{
    this.dbContext = dbContext;
    logger.ConfigureLogger();
    logger.SetApplicationName(ConfigurationManager.AppSettings["AppName"]);
}

Вот как я его называю:

logger.Info ("Test");

Раньше это работало в .NET MVC 5, но когда я перенес код, он перестал работать.Единственное изменение, которое я сделал, было в файле LoggingSettings:

var dbTarget = new DatabaseTarget();
dbTarget.ConnectionString = DatabaseGlobals.ConnectionString;

Раньше это было

var dbTarget = new DatabaseTarget();
dbTarget.ConnectionStringName = "App";

Но я думаю, что ConnectionStringName был прекращен?

Я попытался отладить, но ошибок не было.

1 Ответ

0 голосов
/ 06 февраля 2019

Вместо настройки регистрации в контроллере, затем рассмотрите следующие вики: https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2

Убедитесь, что вы установили пакет nuget System.Data.SqlClient для использования DatabaseTarget в NetCore.

Убедитесь, что вы проверили NLog InternalLogger: https://github.com/NLog/NLog/wiki/Internal-Logging

NLog.Web.AspNetCore ver.4.8.0 позволяет использовать ${configsetting} для назначения ConnectionString из appsettings.json: https://github.com/NLog/NLog/wiki/ConfigSetting-Layout-Renderer.

...