Nlog-动态修改DatabaseTarget,对数据库字符串进行加密
private static Logger processLogger; // ① LnProcessDBLog标签 LogManager.GetLogger("InterFaceDBLog");②使用前先保证不为null,否则InitNlog();
// 修改Nlog.config配置的文件
private static void InitNlog()
{
LoggingConfiguration loggingConfiguration = NLog.LogManager.Configuration;
var rule = loggingConfiguration.LoggingRules.Where(a => a.LoggerNamePattern == "InterFaceDBLog")?.FirstOrDefault();
// 方式一:
//var targetDB = rule.target....FirstOrDefault() ; // 找到DatabaseTarget;不能转化为DatabaseTarget
//targetDB.con // 找不到类型且找到也不可修改,只有get属性
// 方式二:先删除再添加新的
if (rule != null)
{
loggingConfiguration.LoggingRules.Remove(rule); // 移除原来的DatabaseTarget配置
}
var logDatabase = new NLog.Targets.DatabaseTarget("InterFaceDBLog");
logDatabase.DBProvider = "System.Data.SqlClient"; // 使用的连接类库
string _connectionString = ConfigurationManager.AppSettings["DefaultConnection"]; // 加密的连接字符串
logDatabase.ConnectionString = AESEncryptHelper.Decode(_connectionString); // 解密连接字符串
logDatabase.CommandType = CommandType.Text; // 默认为CommandType.Text
logDatabase.CommandText = @"INSERT INTO [SYS_LOG_DETAILS]([LogDate],[LogThread],[LogLevel],[LogLogger],[LogMessage],[LogActionClick],[UserName],[UserIP],[LogOrder]) VALUES(@LogDate,@LogThread,@LogLevel,@LogLogger,@LogMessage,@LogActionClick,@UserName,@UserIP,@LogOrder)";
logDatabase.Parameters.Add(new DatabaseParameterInfo() { Name = "@LogDate", Layout = "${event-properties:item=LogDate}" });
logDatabase.Parameters.Add(new DatabaseParameterInfo() { Name = "@LogThread", Layout = "${event-properties:item=LogThread}" });
logDatabase.Parameters.Add(new DatabaseParameterInfo() { Name = "@LogLevel", Layout = "${event-properties:item=LogLevel}" });
logDatabase.Parameters.Add(new DatabaseParameterInfo() { Name = "@LogLogger", Layout = "${event-properties:item=LogLogger}" });
logDatabase.Parameters.Add(new DatabaseParameterInfo() { Name = "@LogMessage", Layout = "${event-properties:item=LogMessage}" });
logDatabase.Parameters.Add(new DatabaseParameterInfo() { Name = "@LogActionClick", Layout = "${event-properties:item=LogActionClick}" });
logDatabase.Parameters.Add(new DatabaseParameterInfo() { Name = "@LogOrder", Layout = "测试" });
logDatabase.Parameters.Add(new DatabaseParameterInfo() { Name = "@UserName", Layout = "${event-properties:item=UserName}" });
logDatabase.Parameters.Add(new DatabaseParameterInfo() { Name = "@UserIP", Layout = "${event-properties:item=UserIP}" });
loggingConfiguration.AddRule(LogLevel.Trace, LogLevel.Fatal, logDatabase, "InterFaceDBLog", true); // 添加新的DatabaseTarget配置
NLog.LogManager.Configuration = loggingConfiguration; // 赋值给NLog.LogManager.Configuration。
processLogger = LogManager.GetLogger("InterFaceDBLog"); // 重新给全局变量赋值。
}
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/17330023.html
分类:
.Net-ASP.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下