NLog добавление имени схемы базы данных - PullRequest
0 голосов
/ 29 декабря 2018

Я не уверен, возможно ли добавить схему базы данных в NLog.Я попробовал этот метод:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Info"
      internalLogFile="C:\temp\internallog.txt">
  <targets>
    <target name="logfile" xsi:type="File"
            fileName="C:\temp/${shortdate}_logfile.txt"
            layout="${longdate} ${level:uppercase=true} ${message}"/>


    <target xsi:type="Database" name="database"
            connectionString="Server=.\SQLEXPRESS;Database=AppDB;Trusted_Connection=True;MultipleActiveResultSets=true;User Id=AppDBUser;Password=PSSWRD!"
            commandType="StoredProcedure"
            commandText="[AppDB].[ASTONE.EventLogs]">
        <parameter name="@message" layout="${message}" />
        <parameter name="@level" layout="${level}" />
        <parameter name="@logger" layout="${logger}" />
        <!--<dbProvider>System.Data.SqlClient</dbProvider>-->
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Info" writeTo="logfile" />
    <logger name="*" minlevel="Info" writeTo="database" />
  </rules>
</nlog>

Однако, это дает мне эту ошибку:

Ошибка DatabaseTarget (Name = database): Ошибка при записи в базу данных.Исключение: System.Data.SqlClient.SqlException (0x80131904): Не удалось найти хранимую процедуру 'AppDB.ASTONE.EventLogs'.

Я просмотрел вики-сайт NLog, но, похоже, его нетвсе что угодно.

1 Ответ

0 голосов
/ 29 декабря 2018

Это из памяти, но я думаю, что ваше commandText значение должно быть таким:

commandText="[ASTONE].[EventLogs]"

Разделительное . должно быть вне квадратных скобок.

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

ОБНОВЛЕНО НОВОЙ ИНФОРМАЦИЕЙ

Поскольку ASTONE.EventLogs - таблица, вам нужно написать хранимую процедуру, чтобы вставить в нее значения параметров.Это ваш недостающий фрагмент.

Вот пример хранимой процедуры:

CREATE PROC [ASTONE].[LogEvent] 
(
   @message nvarchar(max),
   @level   int,
   @logger  nvarchar(1024)
)
AS 
  INSERT INTO [ASTONE].[EventLogs]
  ( message, level, logger )
  VALUES( @message, @level, @logger)

Я предполагаю, что вы располагаете таблицу EventLogs, а также типы и определения параметров.

И тогда ваш атрибут commandText будет выглядеть так:

 commandText="[ASTONE].[LogEvent]"
...