2010-06-25 7 views
0

J'utilise NLog 1.0 et ai le fichier de configuration suivante:NLog Base de données cible ne pas trouver Tableau

<?xml version="1.0"?> 
<nlog autoReload="true" throwExceptions="true"> 

<targets> 
    <!--<target name="console" xsi:type="ColoredConsole" 
     layout="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}" /> 

    <target name="file" xsi:type="File" fileName="${basedir}/Logs/Site.log" 
     layout="${date}: ${message}" /> 

    <target name="eventlog" xsi:type="EventLog" source="My App" log="Application" 
     layout="${date}: ${message} ${stacktrace}" />--> 

    <target name="database" type="Database" connectionStringName="xxxxxxx"> 

     <dbprovider>mssql</dbprovider> 

     <commandText> 
      INSERT INTO Logs (Message, Level, CreatedOn) VALUES (@message, @level, @createdOn); 
     </commandText> 

     <parameter name="@message" layout="${message}" /> 
     <parameter name="@level" layout="${level}" /> 
     <parameter name="@createdOn" layout="${date}" /> 
    </target> 
</targets> 

<rules> 
    <logger name="*" minlevel="Debug" appendTo="database" /> 

    <!--<logger name="*" minlevel="Info" writeTo="file" /> 
    <logger name="*" minlevel="Fatal" writeTo="eventlog" />--> 
</rules> 

Ceci est presque une pâte de copie de l'exemple fourni avec CodePlex nlog. Dans mon global.ascx je l'ai journal "Application Started!" juste pour tester l'exploitation forestière fonctionne mais c'est là que les problèmes commencent (par la façon dont la cible de fichiers fonctionne bien, il est juste la cible DB):

System.Data.SqlClient.SqlException: Invalid object name 'Logs'. 

Semble assez simple pour moi, doit être une faute de frappe. Je vérifie Profiler SQL et obtenir les suivantes:

exec sp_executesql N' 
      INSERT INTO Logs (Message, Level, CreatedOn) VALUES (@message, @level, @createdOn); 
     ',N'@message nvarchar(20),@level nvarchar(4),@createdOn nvarchar(19)',@message=N'Application Started!',@level=N'Info',@createdOn=N'06/25/2010 23:59:30' 

Ma table est de créer un code ci-dessous:

CREATE TABLE Logs (
Id INT IDENTITY(1, 1) NOT NULL, 
[Level] VARCHAR(5) NOT NULL, 
[Message] VARCHAR(4095) NOT NULL, 
CreatedOn DATETIME NOT NULL, 

CONSTRAINT PK_Logs PRIMARY KEY (Id) 
) 

Toutes les idées, sûrement je manque quelque chose de simple? J'ai réussi à obtenir ce fonctionnement et j'ai l'impression que ma chaîne de connexion est le problème. Lorsque le CommandText est changé:

USE xxxx INSERT INTO dbo.Logs (Message, Level, CreatedOn) VALUES (@message, @level, @createdOn); 

Tous les travaux, je vais essayer quelques chaînes de connexion si vous connaissez un qui fonctionne avec NLog laissez-moi savoir s'il vous plaît!

Répondre

0

Pour résoudre le problème, j'ai ajouté le paramètre « dbDatabase » à la cible comme ceci:

<target name="database" type="Database" connectionStringName="MediaLibrary" dbDatabase="MediaLibrary"> 
     <commandText> 
      INSERT INTO dbo.Logs (Message, Level, CreatedOn) VALUES (@message, @level, @createdOn); 
     </commandText> 
     <parameter name="@message" layout="${message}" /> 
     <parameter name="@level" layout="${level}" /> 
     <parameter name="@createdOn" layout="${date}" /> 
    </target> 
0

Vérifiez l'espace de noms de la table de base de données. Vous pouvez préfixer le nom de la table avec « dbo » (pour la base de données du propriétaire) comme suit:

CREATE TABLE dbo.Logs (
[Id] INT IDENTITY(1, 1) NOT NULL, 
[Level] VARCHAR(5) NOT NULL, 
[Message] VARCHAR(4095) NOT NULL, 
[CreatedOn] DATETIME NOT NULL, 

CONSTRAINT PK_Logs PRIMARY KEY (Id) 
) 

Votre table peut avoir un espace de noms someName.logs lorsque vous l'avez créé. Ensuite, vous pouvez spécifier le nom complet dans le fichier XML comme suit:

INSERT INTO dbo.Logs (Message, Level, CreatedOn) VALUES (@message, @level, @createdOn); 
+0

J'ai vérifié déjà et il est dans le schéma dbo, j'ai aussi essayé d'ajouter ceci au script mais pas de chance "Nom d'objet invalide 'dbo.Logs'". Cela n'a aucun sens puisque le script de profils SQL s'exécute. Est-ce un bug dans NLog? Ou est-ce que d'autres utilisateurs utilisent la journalisation de bases de données? –

Questions connexes