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=""/>
<!-- 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=""/>
<layout type="LogTest.MyLayout, LogTest" >
<param name="ConversionPattern" value="%property{Log_Object}"/>
</layout>
</parameter>
<parameter>
<parameterName value="@Log_Type"/>
<dbType value="String"/>
<size value=""/>
<layout type="LogTest.MyLayout, LogTest" >
<param name="ConversionPattern" value="%property{Log_Type}"/>
</layout>
</parameter>
<parameter>
<parameterName value="@Log_Content"/>
<dbType value="String"/>
<size value=""/>
<layout type="LogTest.MyLayout, LogTest" >
<param name="ConversionPattern" value="%property{Log_Content}"/>
</layout>
</parameter>
<parameter>
<parameterName value="@Log_Url"/>
<dbType value="String"/>
<size value=""/>
<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 = , Log_Content = "", Log_Type = "s", Log_Object = "", 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
log4net 写数据到sql数据库的更多相关文章
- Android学习笔记——保存数据到SQL数据库中(Saving Data in SQL Databases)
知识点: 1.使用SQL Helper创建数据库 2.数据的增删查改(PRDU:Put.Read.Delete.Update) 背景知识: 上篇文章学习了保存文件,今天学习的是保存数据到SQL数据库中 ...
- SQL语句:把Excel文件中数据导入SQL数据库中的方法
1.从Excel文件中,导入数据到SQL数据库情况一.如果接受数据导入的表不存在 select * into jd$ from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ...
- Log4net 写文件日志与数据库日志
一.数据库日志表结构 CREATE TABLE [dbo].[WebLog_Msg]( [LogID] [int] IDENTITY(1,1) NOT NULL, [Date] [datetime] ...
- JSP+JDBC实现在可视化页面中插入数据到SQL数据库
原创 本篇博客创建一个如下图所示的JSP页面,将用户填入的数据插入到对应的数据库中. JSP页面代码: <%@ page language="java" contentTyp ...
- 定时从多个Excel导入数据到SQL数据库
Scheduling Data Imports in SQL Server Importing data into a SQL Server database isn't really that tr ...
- (译)Windows Azure的7月更新:SQL数据库,流量管理,自动缩放,虚拟机
Windows Azure的7月更新:SQL数据库,流量管理,自动缩放,虚拟机 今早我们释出一些很棒的Windows Azure更新.这些新的提升包括:SQL数据库:支持SQL自动导出和一个新的高级层 ...
- MapReduce 程序mysql JDBC驱动类找不到原因及学习hadoop写入数据到Mysql数据库的方法
报错 :ClassNotFoundException: com.mysql.jdbc.Driver 需求描述: hadoop需要动态加载个三方jar包(比如mysql JDBC 驱动包),是在MR结束 ...
- C#读取csv、xls、sql数据库的实现
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- php向数据库写数据逻辑
先写php 文件 1.post请求 1)先确定传进来的数据有值 没有就退出程序 if(!isset($_POST['username'])){ die('没有传值') } 2)设config.php ...
随机推荐
- 简简单单,jquery中,使用checkbox控制div的显示与隐藏
今天开发代码时,发现好久不用jquery就生疏了. 所以作这个记录, 使用checkbox控制div的显示与隐藏. 一,html代码处: <input type="checkbox&q ...
- 浅析struct device结构体
device结构体:设备驱动模型中的基础结构体之一 struct device { /*设备所依附的父设备 大多数情况下,这样的设备是某种总线或主控制器 如果该成员变量的值为NULL,表示当前设备是一 ...
- Genymotion模拟器上money测试
1.查看APK包名:sdk\build-tools\android-4.4W>aapt dump xmltree 123.apk AndroidManifest.xml 查看包名为:com.aa ...
- android 开发工具 adb
1.abd基本使用 1.启动一个adb应用程序 adb -P <port> start-server # -P指定端口 默认是5037 1.停止adb adb kill-server 2. ...
- python的设计模式之MVC模式
模型-视图-控制器模式 关注点分离(Separation of Concerns,SoC)原则是软件工程相关的设计原则之一.SoC原则背后的思想是将一个应用切分成不同的部分,每个部分解决一个单独的关注 ...
- Linux学习笔记-第6天 - 问题的根本
这些知识其实看起来很简单,之前不管是在学习C语言还是bat批处理,类似结构早已熟知. 但其实运用起来并不算好,可能真正的原因还 是在于得多练习吧.希望明年的今天自己不要再纠结与这些基础性的知识.
- 6-ESP8266 SDK开发基础入门篇--操作系统入门使用
了解了8266的串口了,这一节咱就自己写程序,处理一下数据,如果接收到 0xaa 0x55 0x01 就控制指示灯亮 0xaa 0x55 0x00 就控制指示灯灭 注意哈,我是用的假设没有操作系统 ...
- 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)
找环 考虑每次洗牌其实是一次置换的过程,而这样必然就会有循环出现. 因此我们直接通过枚举找出每一个循环,询问时只要找到环上对应的位置就可以了. 貌似比我比赛时被卡成\(30\)分的倍增简单多了? 代码 ...
- C语言实现计算器,附源码,超简单!
#include<stdio.h> #include<math.h> void main() { calculator(); } double calculator() { / ...
- [题解向] 正睿Round409
\(\rm Link\) 然而泥萌没有权限是看不了题目的233. \(\rm T1\) 大概就是个map,脑残出题人认为(x,x)不属于有序二元组,我可qtmd.于是只拿了\(\rm 60pts\) ...