log4net 写数据到sql数据库

最近需要把用户的一些行为添加到数据库中,所以想到了用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

时间: 2024-08-13 19:53:16

log4net 写数据到sql数据库的相关文章

Log4net 写文件日志与数据库日志

一.数据库日志表结构 [sql] view plaincopy CREATE TABLE [dbo].[WebLog_Msg]( [LogID] [int] IDENTITY(1,1) NOT NULL, [Date] [datetime] NOT NULL, [Thread] [nvarchar](255) NULL, [Level] [nvarchar](50) NULL, [Logger] [nvarchar](255) NULL, [Message] [nvarchar](2000) N

定时从多个Excel导入数据到SQL数据库

Scheduling Data Imports in SQL Server Importing data into a SQL Server database isn't really that tricky: there's a straightforward wizard that you can follow to get information from Microsoft Excel, Access and even text files.  But what if you want

【Python】从0开始写爬虫——把扒到的豆瓣数据存储到数据库

1. 我们扒到了什么? id, 名称, 上映年份,上映日期,所属类目, 导演,主演,片长,评分,星评,评价人数 2. 把这些数据做一个分类. a..基本信息 :名称, 导演,上映年份, 所属类目, 片长 b.评价信息:评分,星评,评价人数 c.主演表: 主演(我在纠结要不要单独列一张表) 3 .表设计.现在有点蛋疼的是主键.用自增主键还是电影id做主键.经过我的多方面考虑,我慎重(草率)地决定,用电影id(反正都要建唯一索引,为什么不拿来当主键呢..), 所以我刚才又在id那转了一下数据 m_i

数据库1(数据库、表及表数据、SQL语句)

01数据库概念 A: 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来, 用户可以对数据库中的数据进行增加,修改,删除及查询操作. B: 什么是数据库管理系统 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立.使用和维护数据库, 对数据库进行统一管理和控制,以保证数据库的安全性和完整性.用户通过数据库管理系统访问数据库中表内的数据. 02常见的数据库 * A: 常见的数据库

SQL数据库同步工具(开辟数据同步工具)2.0 中文免费版

SQL数据库同步工具(开辟数据同步工具)本系统分为客户端和服务器两个部分,其中客户端承担了系统绝大数事务,服务器只是简单的执行客户端传送的命令,属于典型的C/S胖客户端瘦服务器模式.这样设计的目的是为了减轻服务器的压力,让系统更加流畅. 本系统分为客户端和服务器两个部分,其中客户端承担了系统绝大数事务,服务器只是简单的执行客户端传送的命令,属于典型的C/S胖客户端瘦服务器模式.这样设计的目的是为了减轻服务器的压力,让系统更加流畅. 客户端负责采集分布数据库中的数据,然后汇总到服务器.客户端需要配

『数据库』随手写了一个 跨数据库 数据迁移工具

随手写了一个 跨数据库 的 数据迁移工具:>目前支持 SQLServer,MySql,SQLite: >迁移工具 可以自动建表,且 保留 主键,自增列: >迁移工具 基于 Laura.Source  ORM框架 开发: >迁移工具 支持 崩溃恢复(重启迁移工具,将会继续 未完成的 数据迁移): >每张表一个事务(即使  表中有 >100W 的数据,也是一个事务完成): >迁移后 的 自增列 和 原数据库 保持一致: 只是展示一下,直接上图片: 操作工具: 迁移工具

sql数据库中查询第几条到第几条的数据

通用方法: select top 500 * from (select top 1000 * from UserSearchDatas order by ID) a order by ID desc sql数据库中查询第几条到第几条的数据,布布扣,bubuko.com

EXCEL页面数据快速写入SQL数据库

将EXCEL数据存入SQL表, 一万行记录大概5秒 Dim conn As New ADODB.Connection Dim CNN As New ADODB.Connection 'Dim rst As New ADODB.Recordset Dim Sql As String Dim j, v As Integer Const cnnstr = "Provider = SQLOLEDB;" & _ "Data Source = ip;" & _

SQL从其他服务器数据库导入数据到本地数据库中

EXEC sp_dropserver 'ITSV2', 'droplogins' exec sp_addlinkedserver 'ITSV2' , '' , 'SQLOLEDB' , '168.9.123.123' exec sp_addlinkedsrvlogin 'ITSV2' , 'false' , null , 'sa' , 'sa' drop table test2; select top 12 * into test2 from ITSV2.InfoDB.dbo.city sele