NLog MySql. Net Журнал Core 3.0 не сохраняется в базе данных - PullRequest
0 голосов
/ 06 февраля 2020

У меня настроен NLog для моего проекта, который сохраняет записи в моей базе данных аудита (отдельно от базы данных по умолчанию). Тем не менее, он не может записать в базу данных. У меня также есть цель для консольного логгера, и это логирование, как и ожидалось. Нет ошибок показаны или даны. Просто не удается записать в базу данных.

Я пробовал различные методы, предоставленные Google, но, похоже, ни один из них не сработал. Я также попытался с помощью NLogBuilder настроить конфигурацию для этого указанного c контроллера, но все равно он не записывает в базу данных

файл nlog.config:

<configSections>  
  <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />  
</configSections> 
<nlog internalLogLevel="Trace">
  <targets>
    <target name="ConsoleLogger" type="Console" 
      layout="${longdate}|${level:uppercase=true}|${logger}|${message}"/>
    <target name="DatabaseLog" type="Database">
      <commandtext>
        INSERT INTO Logs 
        (LogDate, LogLevel, Message, Exception) 
        VALUES 
        (@log_date, @log_level, @message, @exception)
      </commandtext>

      <parameter name="@log_date" 
                 layout="${log_date}" 
                 dbType="DateTime"/>
      <parameter name="@thread" 
                 layout="${thread}" 
                 dbType="String"
                 size="255"/>
      <parameter name="@log_level" 
                 layout="${log_level}"
                 dbType="String"
                 size="20" />
      <parameter name="@logger" 
                 layout="${logger}"
                 dbType="String"
                 size="250" />
      <parameter name="@message" 
                 layout="${message}"
                 dbType="String"
                 size="4000" />
      <parameter name="@exception" 
                 layout="${exception}"
                 dbType="String"
                 size="4000" />

      <dbProvider>MySql.Data.MySqlClient.MySqlConnection, MySql.Data</dbProvider>
      <connectionString>User Id=username;Password=password;Host=localhost;Database=audit_database;TreatTinyAsBoolean=false</connectionString>
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Debug" maxlevel="Fatal" writeTo="ConsoleLogger,DatabaseLog" />
  </rules>
</nlog>

Метод контроллера:

public static Logger _logger = LogManager.GetCurrentClassLogger(typeof(ActionerController));

_logger.Info("text");

Main.cs

public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
    .ConfigureLogging(logging =>
    {
      logging.ClearProviders();
      logging.AddNLog();
    }).ConfigureAppConfiguration((hostingContext, config) =>
    {
      config
        .AddJsonFile($"environment-mount/appsettings.json", optional: true)
        .AddEnvironmentVariables();
    }).ConfigureWebHostDefaults(webBuilder =>
    {
      webBuilder.UseStartup<Startup>();
    });

1 Ответ

1 голос
/ 09 февраля 2020

Для MySQL, убедитесь, что вы установили пакет MySql .Data .

В вашей конфигурации и коде также есть некоторые ошибки:

  • ${log_date}, ${log_level} и ${thread} не существуют. Я думаю, вы имеете в виду ${date}, ${level} и ${threadid}. См. Все опции здесь .
  • LogManager.GetCurrentClassLogger с аргументом ожидает тип регистратора - поэтому наследуется от NLog.Logger. Я думаю, что вы ищете LogManager.GetCurrentClassLogger() или LogManager.GetLogger(typeof(ActionerController).FullName). См. Документы API

Конечно, могут быть и другие ошибки, например, неправильный запрос, неправильные имена столбцов или неправильные типы столбцов. Конечно, NLog может рассказать вам о проблеме:

  • Или включить исключения. В вашей конфигурации <nlog throwExceptions=true >
  • Или включите внутренний журнал: <nlog internalLogFile="c:\log.txt" internalLogLevel="Warn">. Подробнее здесь
...