当前位置: 首页 > 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);

http://www.lqws.cn/news/449875.html

相关文章:

  • 基于PyQt5和PaddleSpeech的中文语音识别系统设计与实现(Python)
  • 数字媒体专业核心课程体系以“艺术创意+数字科技+产业应用”三维融合
  • VSCode1.101.1Win多语言语言编辑器便携版安装教程
  • Can‘t resolve ‘react/jsx-runtime‘ in xxx
  • Vue框架深度解析:从Vue2到Vue3的技术演进与实践指南
  • day43-硬件学习之ARM基础知识
  • uniapp 微信小程序在线引入字体图标
  • 数据集-目标检测系列- 餐具叉子 数据集 fork >> DataBall
  • LibCpr: Windows环境下实现一个C++版本的Http客户端
  • Spring Cloud 服务调用详解:Ribbon 负载均衡与 Feign 声明式接口调用
  • 【MATLAB代码】制导方法介绍与例程——追踪法,适用于二维平面,目标是移动的|附完整源代码
  • C++基础算法————并查集
  • 【Dify精讲】第14章:部署架构与DevOps实践【知识卡片】
  • 虹科案例 | 欣旺达如何实现动力电池测试的长期稳定性+自动化?
  • 【NLP入门系列三】NLP文本嵌入(以Embedding和EmbeddingBag为例)
  • 高效获取速卖通商品实时数据:API 接口开发与接入全流程
  • ReAct
  • 【二进制安全作业】250617课上作业4 - start
  • Linux (2)
  • 【stm32】标准库学习——I2C
  • 指标解读——113页企业信息化成熟度评估指标【附全文阅读】
  • 算法第38天|322.零钱兑换\139. 单词拆分
  • C语言:二分搜索函数
  • 【Java学习笔记】线程基础
  • 【RTSP从零实践】2、使用RTP协议封装并传输H264
  • JetBrains IDE v2025.1 升级,AI 智能+语言支持齐飞
  • Maven 之工程化开发核心指南:插件配置、pom 文件与依赖管理
  • GreatSQL加入openKylin社区,共推开源生态建设
  • keep-alive缓存文章列表案例完整代码(Vue3)
  • Symbol.iterator 详解