Nlog的紀錄改寫到資料庫中

承接上篇,NLog的紀錄可以改寫到資料庫中的,另外Nlog.config檔案也可以與Web.config合併喔,首先進行合併,把Nlog.config的內容除了<?xml….utf-8″?>不要複製外,把內容貼到Web.config的</configuration>之前,然後跑跑看測試,當然跑不出來囉,這是因為Web.config不認識nlog的標籤,只要在<configSections>標籤下多加入一個<section即可,如下:

<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>

這樣就可以運作了,不過記得資料庫要開Table,語法如下:

  SET ANSI_NULLS ON
  SET QUOTED_IDENTIFIER ON
  CREATE TABLE [dbo].[NLog] (
	  [Id] [int] IDENTITY(1,1) NOT NULL,
	  [MachineName] [nvarchar](50) NOT NULL,
	  [Logged] [datetime] NOT NULL,
	  [Level] [nvarchar](50) NOT NULL,
	  [Message] [nvarchar](max) NOT NULL,
	  [Logger] [nvarchar](250) NULL,
	  [Callsite] [nvarchar](max) NULL,
	  [Exception] [nvarchar](max) NULL,
    CONSTRAINT [PK_dbo.Log] PRIMARY KEY CLUSTERED ([Id] ASC)
      WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  ) ON [PRIMARY]

<nlog></nlog>標籤內容可以參考如下,重要的是connectionStringName要改成既有的資料庫連線,NLog.xsd位置也可以換掉。

  <!-- 啟用Log -->
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd Content/NLog.xsd"
        autoReload="true"
        throwExceptions="false"
        internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
    <targets>
      <target xsi:type="File" name="f" fileName="${basedir}/App_Data/logs/${shortdate}.log"
              layout="${longdate} ${uppercase:${level}} ${message}" />
      <target name="database" xsi:type="Database" connectionStringName="您的資料庫連線名稱">
        <commandText>INSERT INTO dbo.NLog (MachineName, Logged, Level, Message,Logger, Callsite, Exception) VALUES (@MachineName, @Logged, @Level, @Message,@Logger, @Callsite, @Exception);</commandText>
        <parameter name="@MachineName" layout="${machinename}" />
        <parameter name="@Logged" layout="${date}" />
        <parameter name="@Level" layout="${level}" />
        <parameter name="@Message" layout="${message}" />
        <parameter name="@Logger" layout="${logger}" />
        <parameter name="@Callsite" layout="${callsite}" />
        <parameter name="@Exception" layout="${exception:tostring}" />
      </target>
    </targets>
    <rules>
      <logger name="*" minlevel="Debug" writeTo="f" />
      <logger name="*" minlevel="Debug" writeTo="database" />
    </rules>
  </nlog>

完成後,這個範例既會寫檔案log,也會寫資料庫log。

More From Forest Beat

冬の前田森林公園のフリ

在Linux中列出目錄的空間使用大小

列出檔案大小的指令是ls,但是這個指令列出的目錄大小是固定的,又不能自動加總,所以想要知道/home/下各個使用者用了多少檔案空間,那可以參考以下指令
技術
0
minutes
高層ビルのフリー写真素材

Windows 10中的小算盤不見了?

如題小算盤不見了怎麼辦?其實很簡單,搜尋商店,然後輸入關鍵字,安裝一下就可以~~~
技術
0
minutes
桜のフリ

Top 20 Best Programming Languages To Learn in 2024

IT小菜雞必需掌握一種以上的程式語言,因為程式語言是實現軟體解決方案的工具。
技術
0
minutes
サクラのフリ

快速了解MVC、MVP、MVVM、MVI架構的演進

MVC、MVP、MVVM、MVI 都是軟體架構模式,用來組織和管理程式碼,提高程式碼的可讀性、可維護性和可擴展性。
技術
0
minutes
spot_imgspot_img