Nlog的版本在4.x時還可以不用裝nlog.database這個nuget套件就可以將log寫到資料庫
但在5.x之後就要裝nlog.database才可以將log寫到資料庫
在asp.net core 3.1時裝4.x,然後nlog.config設定資料庫即可正常寫入
在asp.net 6時裝5.x,nlog.config設定資料庫及裝nlog.database這個nuget套件後才可以正常寫入
以上就是nlog二大版本的差異,後續的設定基本是相同的了
在nlog.config設定寫入目標
<targets>
<target name="database" xsi:type="Database" connectionString="${var:connstr}" dbProvider="System.Data.SqlClient">
<commandText>
INSERT INTO NlogTable (Application, Level, Message, Logger, Callsite)
VALUES (@Application, @Level, @Message, @Logger, @Callsite)
</commandText>
<parameter name="@Application" layout="Test" />
<parameter name="@Level" layout="${level}" />
<parameter name="@Message" layout="${message}" />
<parameter name="@Logger" layout="${logger}" />
<parameter name="@Callsite" layout="${callsite}" />
</target>
</targets>
<!--[設定] 紀錄規則,我這邊只記錄error的問題, 可以再另外自行調整-->
<rules>
<logger name="*" levels="Error" writeTo="database" />
</rules>
連線字串的部份在網路上的文章大部份都是寫在nlog.config
在startup.cs裡的加入這一段
public class Startup
{
var loggerConfig = NLogBuilder.ConfigureNLog("nlog.config");
LogManager.Configuration = loggerConfig.Configuration;
LogManager.Configuration.Variables["connstr"] =”這邊是你的連線字串”;
loggerConfig.ReconfigExistingLoggers();
}
這樣就可以在網站初始化的時候,將連線字串變數動態換成真實的連線字串,而不是把連線字串寫死在nlog.config裡