原文:Log4Net 之将日志记录到数据库的配置 (一)

前段时间我一直想做一个通用一点的日志记录系统,可以便于不同的业务组调用进行日志记录及分析。本来打算着自己下手写一个,后面发现各业务组可能会需要不同的记录方式,比如利用数据库来记录,用txt的文件形式来记录,当然,这些都是最常用的记录方式。而且不同的业务组都希望有自己的记录数据表,不希望和其他业务组的数据混在一起。于是我先前设想的架构方式也就付之一炬了,因为不够灵活,而且实现难度大、周期长。恰在此时想起了之前做项目的时候用的 Log4Net 的开源日志框架,于是又从新Google了一下,发现,真棒。今天我就来给大家介绍一下 Log4Net。

介绍:Log4Net是一个功能著名的开源日志记录组件。通过它可以将.net应用程序的日志记录到多种介质之中,包括:文件、控制台、window事物日志和数据库中(MS SQL Server、Access、Oracle9i、DB2、SQLite)中,并且我们还可以设置和标示日志的级别等。

对于 Log4Net 我想大家都已经不陌生了,所以我就直接奔入主题,我主讲如何进行数据库的配置及自定义表字段(即自定义属性)。关于Log4Net 的配置说明,网上有太多太多的内容了,关于数据库的配置网上也有很多。但是我发现很多都是转来转去,并没有能真正解决数据库配置及自定义表字段的问题,大多数人都出的解决方案也只是拼起来的,不能用。

好了,在.net中使用 Log4Net 来将日志记录到数据库,现在开始:

(1)、我们首先需要一个配置文件,我将其命名为 Log4Net.Config,其内容如下:

<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections> <log4net>
<root>
<level value="INFO"></level>
<appender-ref ref="AdoNetAppender_SQL"/>
</root> <logger name="WebLogger">
<level value="INFO"/>
<appender-ref ref="ADONetAppender" /> </logger> <logger name="WebTest">
<level value="INFO"/>
<appender-ref ref="ADONetTest" /> </logger> <!--SQL数据库-->
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> <bufferSize value="10"/> <!-- SQL数据源 ,本地安装SQL客户端-->
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> <!-- SQL连接字符串-->
<connectionString value="data source=SHUJU-BAILING\SQLEXPRESS;initial catalog=LogSys;integrated security=False;persist security info=True;User ID=sa;Password=123456" /> <commandText value="INSERT INTO Log ([RecordTime],[LevelName],[Message],[Exception],[UserID]) VALUES (@log_date, @log_level, @message, @exception, @UserID)"/> <parameter>
<parameterName value="@log_date"/>
<dbType value="DateTime"/>
<layout type="log4net.Layout.RawTimeStampLayout"/>
</parameter> <parameter>
<parameterName value="@log_level"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level"/>
</layout>
</parameter> <parameter>
<parameterName value="@exception"/>
<dbType value="String"/>
<size value="2000"/>
<layout type="log4net.Layout.ExceptionLayout"/>
</parameter> <parameter>
<parameterName value="@message"/>
<dbType value="String"/>
<size value="4000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter> <!--自定义成员 -->
<parameter>
<parameterName value="@UserID" />
<dbType value="Int32" /> <layout type="JJ.Data.LogCommon.CustomLayout">
<conversionPattern value="%UserID" />
</layout> </parameter> </appender> <!--SQL数据库-->
<appender name="ADONetTest" type="log4net.Appender.ADONetAppender"> <bufferSize value="10"/> <!-- SQL数据源 ,本地安装SQL客户端-->
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> <!-- SQL连接字符串-->
<connectionString value="data source=SHUJU-BAILING\SQLEXPRESS;initial catalog=LogSys;integrated security=False;persist security info=True;User ID=sa;Password=123456" /> <commandText value="INSERT INTO LogTest ([RecordTime],[LevelName],[Message],[Exception],[UserID]) VALUES (@log_date, @log_level, @message, @exception, @UserID)"/> <parameter>
<parameterName value="@log_date"/>
<dbType value="DateTime"/>
<layout type="log4net.Layout.RawTimeStampLayout"/>
</parameter> <parameter>
<parameterName value="@log_level"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level"/>
</layout>
</parameter> <parameter>
<parameterName value="@exception"/>
<dbType value="String"/>
<size value="2000"/>
<layout type="log4net.Layout.ExceptionLayout"/>
</parameter> <parameter>
<parameterName value="@message"/>
<dbType value="String"/>
<size value="4000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter> <!--自定义成员 -->
<parameter>
<parameterName value="@UserID" />
<dbType value="Int32" /> <layout type="JJ.Data.LogCommon.CustomLayout">
<conversionPattern value="%UserID" />
</layout> </parameter> </appender> <!--<root>
<level value="DEBUG" />
<appender-ref ref="ADONetAppender" /> </root>--> </log4net> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup> </configuration>

  这是一个非常完整的 Log4Net 的配置文件,细心的同学会发现,我配置了两张一模一样表,是的,这是我为了做测试用的,我想试试他能不能根据不同的业务需要将不同的日志分别记录到不同的表中(实验证明完全没有问题 )。

<logger name="WebLogger">
<level value="INFO"/>
<appender-ref ref="ADONetAppender" />
</logger> <logger name="WebTest">
<level value="INFO"/>
<appender-ref ref="ADONetTest" />
</logger>

  

  上面的这段配置我想特别强调一下,Logger 配置接点告诉我们,日志信息将分别以ADONetAppender 和 ADONetTest的形式进行输出,而且这两种形式正是我们上面配置的两个表,你仔细观察 appender  配置节的 name 属性,哈哈,是不是一下子就明白了。其实如果我们真正的理解了 Log4Net 配置说明,其实 Log4Net 的使用也就自然而然的掌握了,其它的就是多看一下相应的API文档。

Log4Net 之将日志记录到数据库的配置 (一)的更多相关文章

  1. 也用 Log4Net 之将日志记录到数据库的配置 (一)

    也用 Log4Net  之将日志记录到数据库的配置 (一) 前段时间我一直想做一个通用一点的日志记录系统,可以便于不同的业务组调用进行日志记录及分析.本来打算着自己下手写一个,后面发现各业务组可能会需 ...

  2. 也用 Log4Net 之将日志记录到数据库的后台实现 (二)

    也用 Log4Net 之将日志记录到数据库的后台实现 (二)  大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之 ...

  3. Log4Net 之将日志记录到数据库的后台实现 (二)

    原文:Log4Net 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之前 ...

  4. java注解日志记录到数据库

    1. pom添加依赖包 <!--添加aop依赖--><dependency> <groupId>org.springframework.boot</group ...

  5. 使用log4net无法将日志记录插入mysql数据库解决办法

    写在前面 今天没事研究了下,将日志文件写入mysql数据库,因为新公司用的数据库也是mysql,项目中需要将日志信息写入数据库,没办法,就研究了下.在使用过程中遇到一个很蛋疼的问题.最后解决了,郁闷了 ...

  6. 通过代码配置 Log4net来实现日志记录

    通过代码来创建配置文件,优点看起来更为简洁,不过还得看需求吧,之前我博客也写了一篇通过读取不同的配置文件还实现配置不同日志类型. //记录异常日志数据库连接字符串 private const stri ...

  7. asp.net Web项目中使用Log4Net进行错误日志记录

      使用log4net可以很方便地为应用添加日志功能.应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能.同时,通过外部配置文件,用户可以不用重新编译程序就能 ...

  8. log4j教程 12、日志记录到数据库

    log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库. JDBCAppender 配置: Property 描述 buff ...

  9. Log4Net + Log4Mongo 将日志记录到MongoDb中

    实现: 将日志保存在MongoDb中: 自定义日志字段: 日志按照日期拆分集合: 第一部分:将日志保存在MongoDb中 新建控制台程序Log4MongoDemo 通过NuGet安装Log4Net ( ...

随机推荐

  1. SpringCloud学习系列-构建部门微服务提供者Module

    1.新建microservicecloud-provider-dept-8001 2.POM <project xmlns="http://maven.apache.org/POM/4 ...

  2. 大数据学习笔记之初识Hadoop

    1.Hadoop概述 1.1 Hadoop名字的由来 Hadoop项目作者的孩子给一个棕黄色的大象样子的填充玩具的命名 Hadoop的官网:http://hadoop.apache.org . 1.2 ...

  3. darknet-yolov3模型预测框size不正确的原因

    问题描述:预测框的中心位置正常,但是预测的框的width和height不正常. 解决方法:使得训练的配置cfg和测试中cfg的输入width, height, anchorbox保持一致! 问题是我在 ...

  4. HDU-6703 array

    Description You are given an array a1,a2,...,an(∀i∈[1,n],1≤ai≤n). Initially, each element of the arr ...

  5. 如何快速优雅的解决:ORA-02290: 违反检查约束条件 异常问题

    在向oracle保存数据时,控制台报错如下: 很明显是保存时,该表的设计不允许某个字段非空导致的,但由于该表的数量较多,采用断点的方式有太过麻烦, 这里笔者采用 oracle 的客户端连接工具orac ...

  6. 数据库-SqlServer 行转列,列转行

    两篇行转列,列转行的实例文章: 第1篇:https://www.cnblogs.com/cpcpc/archive/2013/04/08/3009021.html 第2篇:https://mp.wei ...

  7. leetcode-mid-Linked list- 230 Kth Smallest Element in a BST

    mycode  81.40% # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x ...

  8. Linux随笔 - vi/vim 编辑器显示行号

    显示行号 1. 打开vi 编辑器 2. 输入  :set number 3. 回车 关闭行号显示 1. 打开vi 编辑器 2. 输入  :set nonumber 3. 回车 行号在每次打开 vi/v ...

  9. 2019 Nanchang Onsite

    D.Interesting Series F(n)实际上是一个等比数列的和,将它从递推式转变为通项公式(a^n-1)/(a-1),这里只需要确定n就可以. 题目要求选取k大小的所有子集的答案求和,可以 ...

  10. curl 使用 post 请求,传递 json 参数,下载文件

    curl -X POST http://ip:8888/nacos/v1/cs/file/download -H "Accept: application/octet-stream" ...