網頁

NLog - 新版<target xsi:type="Database" />設置方式

NLog - 新版<target xsi:type="Database" />設置方式

ASP.NET MVC4網站開發美學出版後不久,NLog調整了<target>裡Database的設置方式,目前我在網路上看到所有NLog Database的設置,有99.9%都還是舊版範例,這裡提供新的組態設置方式給大家參考。

NLog - 舊版<target xsi:type="Database"設置方式

以下是舊版Database設置方式,也是你在網路上都可以查詢的到的組態:

 <target xsi:type="Database" name="database">
     <dbprovider>mssql</dbprovider>

     <!-- database connection parameters -->
     <!-- alternatively you could provide a single 'connectionstring' parameter -->

     <dbhost>.</dbhost>
     <dbdatabase>NLogDatabase</dbdatabase>
     <dbusername>nloguser</dbusername>
     <dbpassword>nlogpassword</dbpassword>

     <commandText>
         insert into NLog_Errro(time_stamp,level,logger,message) values(@time_stamp, @level, @logger, @message);
     </commandText>

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

NLog - 新版<target xsi:type="Database"設置方式

新版的設置方式與其他File、Mail…等統一了,都是使用“屬性”方式來設置。

 <targets>
   <target xsi:type="Database"
           name="String"
           dbUserName="Layout"
           dbProvider="String"
           useTransactions="Boolean"
           connectionStringName="String"
           connectionString="Layout"
           keepConnection="Boolean"
           dbDatabase="Layout"
           dbPassword="Layout"
           dbHost="Layout"
           installConnectionString="Layout"
           commandText="Layout">
     <install-command commandType="Enum" connectionString="Layout" ignoreFailures="Boolean"
                  text="Layout"/><!-- repeated -->
     <uninstall-command commandType="Enum" connectionString="Layout" ignoreFailures="Boolean"
                    text="Layout"/><!-- repeated -->
     <parameter layout="Layout" name="String" precision="Byte"
          scale="Byte" size="Integer"/><!-- repeated -->
   </target>
 </targets>  
 

語法說明請參考Database target文件。

以下是NLog新Database設置的範例:

 <target xsi:type="Database"
         name="databaseLog"
         connectionString="{YourConnectionString}"
         commandText="insert into NLog_Error (time_stamp, level, logger, message) Values (@time_stamp, @level, @logger, @message)">
   <parameter layout="${date}" name="@time_stamp" />
   <parameter layout="${level}" name="@level" />
   <parameter layout="${logger}" name="@logger" />
   <parameter layout="${message}" name="@message" />
 </target>  
 

我個人是覺得NLog組態統一改為屬性的方式很不錯。

3 則留言:

  1. 想請問一下Bruce大,我將connectionString改為windows azure的SQLDatabase connectionString,卻一直無法連線到(本機可以),不曉得Bruce大有試過嗎?(會不會跟Elmah一樣,放在雲端資料庫要另外設定)

    回覆刪除
    回覆
    1. 你連線的 IP 是否有加入 Azure SQL Database 的信任清單?

      刪除
    2. 有的,我後來自己手動在windows azure的SQLDatabase新增資料表就可以了! 原因可能是我原本用SQL Server2012的匯出資料精靈到SQLDataBase時沒有設定到clustered index,所造成無法連線。

      刪除

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。