log4net 寫數據到sql資料庫

来源:http://www.cnblogs.com/elsons/archive/2017/08/10/7338478.html
-Advertisement-
Play Games

最近需要把用戶的一些行為添加到資料庫中,所以想到了用log4net ,如果有別的好的方案,大家可以給我指正。 先看一下配置文件 我這個是控制台文件 app.config MyLayout 是一個映射類 控制台文 因為項目和別的項目相連,所以有需要的需要引用現有項目就可以 下載鏈接:http://pa ...


最近需要把用戶的一些行為添加到資料庫中,所以想到了用log4net ,如果有別的好的方案,大家可以給我指正。

先看一下配置文件 我這個是控制台文件 app.config

   <layout type="LogTest.MyLayout, LogTest" >
          <param name="ConversionPattern" value="%property{Log_Type}"/>
        </layout> 
這樣的是自定義參數
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <root>
      <level value="ALL"></level>
      <appender-ref ref="ADONetAppender"/>
    </root>
    <!-- SQL資料庫-->
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
      <bufferSize value="1"/>
      <!-- SQL數據源 ,本地安裝SQL客戶端-->
      <connectionType value="System.Data.SqlClient.SqlConnection,System.Data, Version=1.0.3300.0, Culture=neutral,PublicKeyToken=b77a5c561934e089" />
      <connectionString value="database=ASM_UserManger;server=xxxxxx;User ID=xxx;Password=xxxx" />
      <commandText value="INSERT INTO ASM_Log ([Log_Object],[Log_Type],[Log_Content],[Log_Url],[au_ID]) VALUES (@Log_Object,@Log_Type, @Log_Content, @Log_Url, @au_ID)"/>
      <parameter>
        <parameterName value="@Log_Object"/>
        <dbType value="String"/>
        <size value="200"/>
        <layout type="LogTest.MyLayout, LogTest" >
          <param name="ConversionPattern" value="%property{Log_Object}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Log_Type"/>
        <dbType value="String"/>
        <size value="200"/>
        <layout type="LogTest.MyLayout, LogTest" >
          <param name="ConversionPattern" value="%property{Log_Type}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Log_Content"/>
        <dbType value="String"/>
        <size value="2000"/>
        <layout type="LogTest.MyLayout, LogTest" >
          <param name="ConversionPattern" value="%property{Log_Content}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Log_Url"/>
        <dbType value="String"/>
        <size value="100"/>
        <layout type="LogTest.MyLayout, LogTest" >
          <param name="ConversionPattern" value="%property{Log_Url}"/>
        </layout>
      </parameter>
      <!-- 自定義成員 -->
      <parameter>
        <parameterName value="@au_ID" />
        <dbType value="Int32" />
        <layout type="LogTest.MyLayout, LogTest" >
          <param name="ConversionPattern" value="%property{au_ID}"/>
        </layout>
      </parameter>
    </appender>
  </log4net>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

MyLayout 是一個映射類

 public class MyLayout : PatternLayout {
        public MyLayout() {
            this.AddConverter("property", typeof(MyMessagePatternConverter));
        }
    }

    public class MyMessagePatternConverter : PatternLayoutConverter {
        protected override void Convert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent) {
            if (Option != null) {
                // Write the value for the specified key  
                WriteObject(writer, loggingEvent.Repository, LookupProperty(Option, loggingEvent));
            }
            else {
                // Write all the key value pairs  
                WriteDictionary(writer, loggingEvent.Repository, loggingEvent.GetProperties());
            }
        }
        /// <summary>  
        /// 通過反射獲取傳入的日誌對象的某個屬性的值  
        /// </summary>  
        /// <param name="property"></param>  
        /// <returns></returns>  
        private object LookupProperty(string property, log4net.Core.LoggingEvent loggingEvent) {
            object propertyValue = string.Empty;
            PropertyInfo propertyInfo = loggingEvent.MessageObject.GetType().GetProperty(property);
            if (propertyInfo != null)
                propertyValue = propertyInfo.GetValue(loggingEvent.MessageObject, null);
            return propertyValue;
        }
    }

 

 控制台文

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LogTest {
    class Program {
        static void Main(string[] args) {
            log4net.Config.XmlConfigurator.Configure();

            log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
            log.Info(new ASM_Log { au_ID = 1, Log_Content = "11", Log_Type = "s", Log_Object = "3", Log_Url = "sss" });

            Console.ReadKey();
        }
    }
    public class ASM_Log {
        public int au_ID { set; get; }
        public string Log_Object { set; get; }
        public string Log_Type { set; get; }
        public string Log_Content { set; get; }

        public string Log_Url { set; get; }
    }
}

 

 

因為項目和別的項目相連,所以有需要的需要引用現有項目就可以

下載鏈接:http://pan.baidu.com/s/1jHJgLnS

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 乙太網連接 如下圖。 實踐: 1,通過lspci命令查看網卡硬體信息 2,通過ifconfig eth0查看網卡信息 3,通過ifup eth0來啟用網卡 配置網路信息 實踐: 網路相關配置文件 實踐: 1,查看網卡配置文件 2,查看DNS配置文件 3,查看主機名配置 4,查看靜態主機名配置 網路測 ...
  • 『Halo 4』的多人線上模式是游戲的亮點之一,憑藉這一優勢,持續 5 周的『光環4 無盡號的挑戰』比賽也辦得如火如荼。在這個全球規模最大的自由進入式線上 Halo 競賽中,游戲的開發及運營團隊——微軟 343 游戲工作室,每天在忙什麼呢? 用更高效的方式來響應玩家的請求 保證《光環 4》進行每周一... ...
  • 1.隱藏最上面的GroupPanel: gridView1.OptionsView.ShowGroupPanel=false; 2.得到當前選定記錄某欄位的值: sValue=Table.Rows[gridView1.FocusedRowHandle][FieldName].ToString(); ...
  • http://book.51cto.com/art/201108/285995.htm ...
  • 網路基礎 IP地址 如下圖。 子網掩碼 1,同一個網路主機之間通信 2,不同網路主機之間通信 路由 功能變數名稱 如下圖。 DNS 基本網路參數 ...
  • 參考:http://blog.sina.com.cn/s/blog_55e55fcb0100o5de.html ...
  • 預設許可權 實踐:使用umask命令分別查看普通用戶和root用戶的umask屬性值。 特殊許可權 實踐:添加一個組,兩個用戶,來做下驗證 首先,添加一個組:testgrp,兩個用戶,testuser1和testuser2。 在/temp/下創建文件夾linuxcast.net,並且將該文件夾的所屬組指 ...
  • 前幾天公司來了個新同事,使用的VS2013,但我們的所有項目都是使用VS2012創建的,我想用13打開應該沒有什麼問題。昨天新同事修改完代碼提交後,我獲取完成後無法編譯成功,提示: 錯誤 3 命令“mkdir "E:\vssdata\BCenter.root\BCenter\BCenter.Cont ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...