首页 > 数据库 >Nlog-动态修改DatabaseTarget,对数据库字符串进行加密

Nlog-动态修改DatabaseTarget,对数据库字符串进行加密

时间:2023-04-18 16:11:32浏览次数:41  
标签:加密 Parameters DatabaseParameterInfo Add Nlog DatabaseTarget new Layout logDataba

    private static Logger processLogger;  // ① LnProcessDBLog标签 LogManager.GetLogger("LnProcessDBLog");②使用前先保证不为null,否则InitNlog();

    // 修改Nlog.config配置的文件
    private static void InitNlog()
    {
        LoggingConfiguration loggingConfiguration = NLog.LogManager.Configuration;

        var rule = loggingConfiguration.LoggingRules.Where(a => a.LoggerNamePattern == "LnProcessDBLog")?.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("LnProcessDBLog");
        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, "LnProcessDBLog", true);  // 添加新的DatabaseTarget配置
        NLog.LogManager.Configuration = loggingConfiguration;  // 赋值给NLog.LogManager.Configuration。

        processLogger = LogManager.GetLogger("LnProcessDBLog");  // 重新给全局变量赋值。
    }

标签:加密,Parameters,DatabaseParameterInfo,Add,Nlog,DatabaseTarget,new,Layout,logDataba
From: https://www.cnblogs.com/qq2806933146xiaobai/p/17330023.html

相关文章

  • 好物分享:一款可以加密云盘视频,并依然可在线播放的免费小工具——Alist 云盘视频加密助
    在当前娱乐资源丰富的时代,人们每天都在接触各种视频资源。然而,网盘限速、版权审核、视频分级、少儿不宜等问题经常让人感到困扰。如何在保护隐私的前提下,让视频存储和分享变得更加便捷、安全呢?分享一款实用的免费小工具——Alist云盘视频加密助手v1.1(完全免费的哟),懂的都懂!拿走不......
  • app直播源码,Node.js实现密码散列加密
    app直播源码,Node.js实现密码散列加密1.安装所需的包: npmibcryptjs--save​2.修改MongoDB中的模型: ///models/AdminUser.js constmongoose=require('mongoose')//定义模型的字段constschema=newmongoose.Schema({  username:{//用户名    ty......
  • SQL Server 透明数据加密TDE for AlwaysOn
     上篇留下了一个问题,如何将已启用TDE的数据库加入AG?实际上TDEforAlwaysOn分两种情况:对已在AG中的数据库启用TDE已启用TDE的数据库加入AG(更复杂)注意如果在数据库镜像、日志传送、AlwaysOn中使用TDE,则主从数据库都将被加密,不必显式启用辅助数据库加密,事务日志在它们之间发送时将被......
  • java 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
    通过java程序调用sqlserver数据库,报错驱动程序无法通过使用安全套接字层(SSL)加密与SQLServer建立安全连接。错误:“TheserverselectedprotocolversionTLS10isnotacceptedbyclientpreferences[TLS12]”。ClientConnectionId:9c0c766b-97d5-41c6-884e-1ecbdefbac0......
  • 如何查看Oracle加密代码
    例如我们想看看dbms_pdb.cleanup_task这个函数的内容是什么,直接看会发现只能看到声明,代码是加密的可以把加密后的代码粘出来解密https://www.codecrete.net/UnwrapIt/解密后找到cleanup_task对应部分查了下PRAGMAINTERFACE(C,KPDBCLEANUPTASK);意思是调用C语言的内部代码,更深一层......
  • 加密的一些事
    互联网的加密层面经常会有一些比较专业的英文,这次来盘点一下:ssl安全套接字层。位于传输层和应用层之间的加密层。非对称加密。确保应用层的数据是被加密的tls传输层安全。在传输层下的加密层。非对称加密。ssh安全shell。使用加密的shell进行远程操作。非对称加密。gpggn......
  • python学习之-加密字体反扒
    #coding=utf-8'''#获取实习僧招聘信息#(https://www.shixiseng.com/interns?page=2&type=intern&keyword=%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98&area=&months=&days=°ree=&official=&enterprise=&salary=-0&publishTime=......
  • 加密算法
    #include<stdio.h>#include<stdlib.h>#include<stdint.h>#include<string.h>#include<openssl/rsa.h>#include<openssl/err.h>#include<openssl/objects.h>#pragmacomment(lib,"libssl.lib")#pragmac......
  • 在Node.JS中,调用JShaman的Web API接口,加密JS代码。
    在Node.JS中,调用JShaman的WebAPI接口,加密JS代码。源码varjs_code=` functionNewObject(prefix) { varcount=0; this.SayHello=function(msg) { count++; alert(prefix+msg); } this.GetCount=function() { returncount; } } varobj=newNewO......
  • 私钥和公钥到底是谁来加密、谁来解密?
    1. 应用场景场景1(第一种用法):用于加解密,此时使用公钥加密,私钥解密。场景2(第二种用法):用于数字签名,此时使用私钥签名,公钥验签。有点混乱,不要去硬记,你只要这样想即可:-既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;-既然是......