web-dev-qa-db-fra.com

Comment configurer NLog pour écrire dans une base de données?

J'essaie d'obtenir que NLog écrive dans une base de données. Cependant, avec mon code actuel, une exception est levée lorsque je tente de déboguer. L'exception est la suivante: Le type initializer de 'NotifyIcon.Program' a émis une exception.

le code de mon fichier de configuration NLog est ci-dessous, car cela semble être à l'origine du problème car c'est le seul code que j'ai modifié.

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

toute aide serait grandement appréciée =]

23
Captain_Custard

Vous semblez manquer les paramètres à insérer.

Voir les exemples à http://justinpdavis.blogspot.com/2010/04/logging-to-database-with-nlog.html

La page Web nLog n'indique pas très clairement que cela est nécessaire, mais si vous plissez les yeux et que vous lisez https://github.com/nlog/NLog/wiki/Database-target , vous devriez constater qu'ils sont requis.

13
Brad Bruce

Il semble que votre chaîne d'insertion n'est pas dans le bon format? Il vous manque () autour de la liste des paramètres.

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

U a également écrit 2 cibles. Et aussi beaucoup d'attributs que vous n'avez pas besoin de définir. Devrait juste être:

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

Quelque chose comme ça. Facile non? :)

0
WtFudgE