2010-06-25 17 views
0

我使用NLOG 1.0,並具有以下配置文件:NLOG數據庫目標沒有找到表

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

這幾乎是從與n日誌提供的CodePlex上例的複製粘貼。在我的global.ascx中,我有它的日誌「Application Started!」只是爲了測試記錄工作然而,這就是問題的開始(順便文件目標效果很好,它只是在DB目標):

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

似乎相當直截了當給我,必須是一個錯字。我檢查SQL事件探查器,並得到如下:

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' 

我的表中創建代碼如下:

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

任何想法,我肯定很簡單的東西?


我設法得到這個工作,並有一種感覺我的連接字符串是問題。當在CommandText更改爲:

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

所有的作品,我會嘗試一些連接字符串,如果你知道任何與工作NLOG讓我知道請!

回答

0

要解決我添加了「dbDatabase」參數設置爲目標,像這樣的問題:我查過這個已經

<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

檢查數據庫表的名稱空間。你可以用「DBO」(數據庫所有者)前綴,表名如下:當你創建它

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

你的表可能有someName.logs的命名空間。然後,你可以在XML文件中指定完整名稱如下:

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

,它的在dbo架構中,我也嘗試將其添加到腳本中,但沒有運氣「無效的對象名稱'dbo.Logs'」。這是沒有任何意義,因爲SQL配置文件腳本執行。這是NLog中的一個錯誤嗎?還是其他人使用數據庫日誌記錄好嗎? – 2010-06-26 02:25:44