当前位置: 首页 > news >正文

.NET 4.7中使用NLog记录日志到数据库表

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);

相关文章:

  • 通过Radius认证服务器实现飞塔/华为防火墙二次认证:原理、实践与安全价值解析
  • 非线性方程组求解:复杂情况下的数值方法
  • JavaScript Symbol 属性详解
  • GA3C(GPU/CPU混合式异步优势Actor-Critic)算法实现控制倒立摆
  • Cppcheck 使用教程:本地 + CMake + GitHub Actions 自动分析实战
  • 创业知识概论
  • 【ing】Ubuntu安装Anaconda及环境配置\docker\pycharm
  • Qwen3 Embedding 结构-加载-训练 看透模型设计哲学
  • Linux——库文件生成和使用
  • ADC的传递函数
  • Spring 源码学习 2:Bean 后处理器
  • 大模型学习入门——Day3:注意力机制
  • 零基础入门PCB设计 一实践项目篇 第四章(STM32开发板PCB设计)
  • Seata:微服务分布式事务的解决方案
  • 饼图:数据可视化的“切蛋糕”艺术
  • 详解Redis的过期策略
  • 邮件合并----批量从excel表中导出数据到word中
  • Git——分布式版本控制工具
  • 【ESP32摄像头开发实例】-实现遥控视频小车
  • 让Agent的应用价值增长
  • 武汉seo网站推广公司武汉/站长之家素材网
  • 付费阅读网站代码/搜狗站长工具
  • 网站如何做seo推广/广告网页
  • 免费网站空间申请/一键建站
  • 新网站如何做百度百科/深圳全网营销平台排名
  • 轮播网站/石家庄网络推广