平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“.NET4.7采用NLog记录日志到数据库表”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
在项目里安装以下NuGet包:
相应的数据库提供程序(如System.Data.SqlClient for SQL Server)
Install-Package NLog
Install-Package NLog.Config
Install-Package System.Data.SqlClient
在项目里添加或修改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:tempnlog-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:tempnlog-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>
确保你的数据库中有对应的表结构:
CREATE TABLE LoginLogs (
ID UNIQUEIDENTIFIER PRIMARY KEY,
LoginName NVARCHAR(100),
Message NVARCHAR(MAX),
CreateTime DATETIME
)
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);
}
}
var loginService = new LoginService();
// 成功登录
loginService.LogLoginAttempt("john.doe", "User logged in successfully", true);
// 失败登录
loginService.LogLoginAttempt("john.doe", "Invalid password", false);
到此这篇关于.NET4.7采用NLog记录日志到数据库表的文章就介绍到这了,更多相关.NET NLog记录日志到数据库表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!