1. 首先安裝必要的NuGet包
在項目中安裝以下NuGet包:
-
NLog
-
NLog.Config (可選,用于自動生成配置文件)
-
相應的數據庫提供程序(如System.Data.SqlClient for SQL Server)
Install-Package NLog
Install-Package NLog.Config
Install-Package System.Data.SqlClient
2. 配置NLog.config文件
在項目中添加或修改NLog.config文件:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"autoReload="true"internalLogLevel="Info"internalLogFile="c:\temp\nlog-internal.log"><extensions><add assembly="NLog" /></extensions><targets><!-- 數據庫目標 --><target name="database" xsi:type="Database"connectionString="YourConnectionStringHere"commandText="INSERT INTO LoginLogs(ID, LoginName, Message, CreateTime) VALUES(@ID, @LoginName, @Message, @CreateTime)"><parameter name="@ID" layout="${guid}" /><parameter name="@LoginName" layout="${event-properties:item=LoginName}" /><parameter name="@Message" layout="${message}" /><parameter name="@CreateTime" layout="${date:format=yyyy-MM-dd HH\:mm\:ss}" /></target></targets><rules><logger name="*" minlevel="Info" writeTo="database" /></rules>
</nlog>
?如果需要使用異步記錄日志的話,配置如下:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"autoReload="true"internalLogLevel="Info"internalLogFile="c:\temp\nlog-internal.log"><extensions><add assembly="NLog" /></extensions><targets async="true"> <!-- 啟用全局異步 --><!-- 異步數據庫目標 --><target name="asyncDatabase" xsi:type="AsyncWrapper" queueLimit="10000" overflowAction="Discard"><target xsi:type="Database"connectionString="YourConnectionStringHere"commandText="INSERT INTO LoginLogs(ID, LoginName, Message, CreateTime) VALUES(@ID, @LoginName, @Message, @CreateTime)"><parameter name="@ID" layout="${guid}" /><parameter name="@LoginName" layout="${event-properties:item=LoginName}" /><parameter name="@Message" layout="${message}" /><parameter name="@CreateTime" layout="${date:format=yyyy-MM-dd HH\:mm\:ss}" /></target></target></targets><rules><logger name="*" minlevel="Info" writeTo="asyncDatabase" /></rules>
</nlog>
3. 創建數據庫表
確保你的數據庫中有對應的表結構:
CREATE TABLE LoginLogs (ID UNIQUEIDENTIFIER PRIMARY KEY,LoginName NVARCHAR(100),Message NVARCHAR(MAX),CreateTime DATETIME
)
4. 在代碼中使用NLog記錄登錄日志?
using NLog;public class LoginService
{private static readonly Logger Logger = LogManager.GetCurrentClassLogger();public void LogLoginAttempt(string loginName, string message, bool isSuccess){var logEvent = new LogEventInfo{Level = isSuccess ? LogLevel.Info : LogLevel.Warn,Message = message};logEvent.Properties["LoginName"] = loginName;Logger.Log(logEvent);}
}
5. 使用示例?
var loginService = new LoginService();// 成功登錄
loginService.LogLoginAttempt("john.doe", "User logged in successfully", true);// 失敗登錄
loginService.LogLoginAttempt("john.doe", "Invalid password", false);