web-dev-qa-db-ja.com

NLogを構成してデータベースに書き込むにはどうすればよいですか?

NLogにデータベースへの書き込みを試行していますが、現在のコードでは、デバッグしようとすると例外がスローされます。例外は次のとおりです。「NotifyIcon.Program」の型初期化子が例外をスローしました。

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">

  <!-- 
  See http://nlog-project.org/wiki/Configuration_file 
  for information on customizing logging rules and outputs.
   -->
  <targets>
    <!-- add your targets here -->

    <target name="database" xsi:type="Database" />
    <target xsi:type="Database"
          name="String"
          dbUserName="Layout"
          dbProvider="sqlserver"
          useTransactions="false"
          connectionStringName="String"
          connectionString="Data Source=AC-02\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"
          keepConnection="true"
          dbDatabase="Layout"
          dbPassword="Layout"
          dbHost="Layout"
          installConnectionString="Layout"
          commandText="INSERT INTO Logs (Machine_Name, Username, Logon_Time, Screensaver_On, Screensaver_Off, Logoff_Time, Program_Start) Values @MachineName, @Username, @LogonTime, @Screensaver_On, @Screensaver_Off, @LogoffTime, @ProgramStart "/>

  </targets>

  <rules>

    <logger name="*" minlevel="Trace" writeTo="database" />

  </rules>
</nlog>

すべての助けは大歓迎です=]

25
Captain_Custard

挿入されるパラメーターが欠落しているようです。

http://justinpdavis.blogspot.com/2010/04/logging-to-database-with-nlog.html の例を参照してください

NLog Webページでは、これらが必要であることはあまり明確にされていませんが、目を細めて読みます https://github.com/nlog/NLog/wiki/Database-target それらが必要であることがわかります。

14
Brad Bruce

Uは2つのターゲットも作成しました。また、設定する必要のない多くの属性。ちょうどする必要があります:

<target name="DbLog" xsi:type="Database" connectionString="YourConStr" 
        commandText="insert into [blablablabal] (Col1) values (@val1)">
  <parameter name="@val1" layout="${level}" /></target>

このようなもの。簡単? :)

2
WtFudgE

簡単な例、

構成:

<target type="Database" name="database" connectionstring="Server=localhost;Database=NLog;Trusted_Connection=True;">
  <commandText>
    INSERT INTO NLogEntries ([Origin], [Message], [LogLevel],[CreatedOn],[OrderId]) VALUES (@Origin,@Message,@LogLevel,@Date, @OrderId);
  </commandText>
  <parameter name="@Date" layout="${date}" dbType="DbType.Date"/>
  <parameter name="@Origin" layout="${callsite}"/>
  <parameter name="@LogLevel" layout="${level}"/>
  <parameter name="@message" layout="${message}"/>
  <parameter name="@OrderId" layout="${event-properties:MyOrderId}" dbType="DbType.Int32"/> <!-- custom field! Note also the DB Type. Using Logger.WithProperty -->
</target>

NLog 4.6はDbTypeもサポートしていることに注意してください- https://nlog-project.org/2019/03/20/nlog-4-6-is-live.html を参照してください

1
Julian

挿入文字列が正しい形式ではないようです?パラメーターリストの周りに()がありません。

commandText="INSERT INTO Logs (Machine_Name, Username, Logon_Time, Screensaver_On, Screensaver_Off, Logoff_Time, Program_Start) Values (@MachineName, @Username, @LogonTime, @Screensaver_On, @Screensaver_Off, @LogoffTime, @ProgramStart) "
1
automatic