log4net.config 将日记同时写入到数据库和文件当中

《1》

1》在项目中新建新建一个log4net.config的配置文件。

2》从log4net官网下面log4net的文件包,然后在包的bin文件夹下的net文件夹中的4.0文件夹中找到log4net.dll文件,然后将它引入到我们的项目中来

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <configSections>
    <!--配置一个结点 名称为log4net-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <log4net>
    <!--写入到文件-->
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">

      <!--文件路径,如果RollingStyle为Composite或Date,则这里设置为目录,文件名在DatePattern里设置,其他则这里要有文件名。已经扩展支持虚拟目录-->
      <param name="File" value="Log\\LogInfo\\" /><!--将日记写入到跟目录下面的Log文件夹下面的LogInfo文件夹下面的yyyy-MM-dd.TXT文件中-->     

      <param name="AppendToFile" value="true" />

      <param name="MaxSizeRollBackups" value="100" />

      <param name="MaximumFileSize" value="10240KB" />

      <param name="StaticLogFileName" value="false" />

      <param name="RollingStyle" value="Date" />

      <param name="DatePattern" value="yyyy-MM-dd.TXT" /> <!--TXT后缀必须是大写的,否则有问题-->

      <param name="CountDirection" value="-1" />

      <!--log4net记录错误的格式(即:用什么样的格式(布局)来记录错误)-->

      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value=" 【时间】:%d%n 【级别】:%p%n 【类名】:%c%n 【线程ID】: %thread %n 【文件地址】:%F 第%L行%n 【日志内容】:%m%n 【日记详细】:%exception %n---------------------------------------------------------------------------------------------------------------%n" />
      </layout>
    </appender>

    <!--将日记写入数据库-->

    <appender name="ADONetAppender_SqlServer" type="log4net.Appender.ADONetAppender">
      <bufferSize value="0" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <!--<connectionString value="SERVER=FB-VAIO;DATABASE=sales;UID=sa;PWD=123456;Connect Timeout=15;" />-->
      <connectionString value="Data Source=FB-VAIO;Initial Catalog=sales;Integrated Security=SSPI;Connect Timeout=15;" />
      <commandText value="INSERT INTO xlog ([Date],[Thread],[Level],[logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />

      <parameter>
        <parameterName value="@log_date"/>
        <dbType value="DateTime"/>
        <layout type="log4net.Layout.RawTimeStampLayout"/>
      </parameter>

      <parameter>
        <parameterName value="@thread"/>
        <dbType value="String"/>
        <size value="255"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%t"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@log_level"/>
        <dbType value="String"/>
        <size value="50"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%p"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@logger"/>
        <dbType value="String"/>
        <size value="50"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@message"/>
        <dbType value="String"/>
        <size value="4000"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%m"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@exception"/>
        <dbType value="String"/>
        <size value="2000"/>
        <layout type="log4net.Layout.ExceptionLayout">
          <conversionPattern value="%exception"/>
        </layout>
      </parameter>
    </appender>

    <!--在出现什么级别的错误才记录错误 【注意:如果有多个appender-ref的时候,应该给他们放到同一个root节点下】-->
    <root>
      <level value="ALL" />
      <appender-ref ref="LogFileAppender"/>
      <appender-ref ref="ADONetAppender_SqlServer"/>
    </root>

  </log4net>
</configuration>

如果项目是webForm应用程序,那么可以在根目录下找到Properties文件下面的AssemblyInfo.cs类。打开它,AssemblyInfo.cs类的最后面添加一段代码:如下:

//ConfigFile="log4net.config"表示:我们配置文件的路径为网站根目录下的mylognet4.config这个配置文件,这样程序运行的时候就会按照这个路径来读取这个配置文件
//Watch:log4net框架用这个属性来确定是否需要在运行时监视文件的改变,如果这个属性为true,那么FilsSystemWatcher将会被用来监视文件的改变,重命名,删除等事件。(即:如果这个配置文件发生变化的时候它是否自适应这个变化,也就是说它会自动的去读取这个变化,而不需要重新启动这个正在运行的这个web应用程序)

//其实如果我们吧log4net的配置文件直接配置在web.config文件里,这里就不需要在配置了。这里之所以需要配置是因为我们是独立建立的一个log4net配置文件,为了让它与我们的程序关联起来,在这里,需要对我们建立的log4net配置文件进行读取,加载到我们的程序当中

[assembly: log4net.Config.XmlConfigurator(ConfigFile="log4net.config", Watch = true)]

那如果项目不是webForm应用程序,或者项目中没有AssemblyInfo.cs这个类,怎么办呢? 答:那我们可以在项目跟目录下创建一个Global.asax文件

在Global.asax文件的protected void Application_Start(object sender, EventArgs e)方法中添加一段代码,代码如下:

protected void Application_Start(object sender, EventArgs e)
{
    string filePath = Server.MapPath("~/log4net.config");
    FileInfo fil = new FileInfo(filePath);

    log4net.Config.XmlConfigurator.Configure(fil); //将

	//其实以上三句代码可以用下面这一句替代
    //log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/log4net.config")));
}

注意:我们上面的两段代码主要的功能就是将我们新建的log4net.config这个配置文件加载到我们的项目中去(因为我们新建的log4net.config配置文件与我们项目是没有关系的,所以这里需要将它加载到我们的项目中去)如果在AssemblyInfo.cs文件中加载了,就不需要在Global.asax文件里再加载一次了。(根据爱好,两者选其一)

在项目中添加WebForm1.aspx文件,我们拖一个button控件到我们的WebForm1.aspx页面中来,button控件 命名 ”请点击按钮,测试错误“

双击button控件,给它添加单击事件,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using log4net;
using System.Reflection;
namespace WebTest
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            int x = 6;
            int y = 0;
            try
            {
                int z = x / y;
            }
            catch (Exception ex)
            {
                //Getlogger()静态方法,用来检索框架里是否存在logger对象,如果不存在就创建一个名字为logger的对象
                //log4net.ILog log = log4net.LogManager.GetLogger("WebLogger");//这个WebLogger其实就是配置文件中的logger的name属性名称。它代表的是错误的类名

                log4net.ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);//自获取出错的类
                if (log.IsErrorEnabled)
                {
                    log.Error("错误:"+ex.Message,ex);
                }
                Response.Write("OK");
            }
        }
    }
}

然后我们在数据中新建一个表 命名为 xlog  表结构如下:

好了。现在可以看测试效果了,运行我们的项目。

点击页面上的按钮。 然后我们再去我们数据库中的xlog表中查看一下数据,发现已经有一条错误日记写入到表中了。

我们再去项目所在的磁盘目录下  ,在项目文件夹下面我们看到生成了一个log文件夹,在log文件夹下面有一个loginfo文件夹,loginfo文件夹下面有一个以当前日期命名的txt文件,这个文件就是我们刚刚生成的错误日记了。打开看一下:

时间: 2024-10-19 00:30:05

log4net.config 将日记同时写入到数据库和文件当中的相关文章

Log4Net写入到数据库配置过程中的一些小问题备忘

问题1: 在公司进行log4net写入服务器配置的时候,一切正常,但是在家里的机器上,就频繁出现这个问题: SQL Server 2008 报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误 并且这种错误是随机性的,在log4net往数据库插入几条的时候,没问题,但是插入次数一多起来,就频繁报这个错误.后来没办法,网上搜罗了一圈,最终发现了解决方案: 将相关的TCP参数都设置为启动之后,就再没遇到过问题. 问题2,log4net配置都正确,但是一直无法写入数据库. 这个问题困扰了好久,

C# log4net 日志写入到数据库

效果图: 1:第一步创建SQL表结构 CREATE TABLE [dbo].[LogDetails] ( [LogID] int NOT NULL IDENTITY(1,1) , [LogDate] datetime NOT NULL , [LogThread] nvarchar(100) NOT NULL , [LogLevel] nvarchar(200) NOT NULL , [LogLogger] nvarchar(500) NOT NULL , [LogMessage] nvarcha

关于log4net日志写入mysql数据库记录

网上关于log4net日志写入mysql数据库的博客感觉比较少,所以这边搞定之后先过来记录一下. 首先新建个项目,我命名是log4netDemo,然后需要引入两个dll,一个是mysql.dll,一个是log4net.dll.可以通过NuGet安装这两个dll,如下图 我这边mysql和log4net的版本分别是6.10.8和2.0.8,当然mysql更高版本的也是可以的. 然后在项目中新建一个log4net.config的配置文件,配置全文如下: <?xml version="1.0&q

使用独立的log4net.config文件配置log4net,将日志记录到Mysql数据库【原创】

开发环境: VS2013, Asp.Net MVC 4.0, .Net Framework 4.0, Log4net 1.2.13.0, Mysql.Data.dll,6.8.3.0 设置步骤: 1.在站点根目录下,创建一个log4net.config的XML文件.(文件名称可以任意,我们这里叫做log4net.config) <?xml version="1.0" encoding="utf-8"?><configuration> <

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

写在前面 今天没事研究了下,将日志文件写入mysql数据库,因为新公司用的数据库也是mysql,项目中需要将日志信息写入数据库,没办法,就研究了下.在使用过程中遇到一个很蛋疼的问题.最后解决了,郁闷了半天.这里做一下记录,以免再犯. 之前写个这方面的文章,关于配置信息,可参考我的这篇文章:Log4Net日志记录两种方式 解决办法 问题就出在我直接将log4net写入数据库的配置文件log4net.config直接复制过来在项目中使用了,当然是修改了连接字符串,提供程序等与mysql相关的配置.配

Log4Net Config Appender

整理了下以前项目中使用的Log4Net的Appender. 1:只记录在一个文件下的 <appender name="RollingFileAppenderFileSize" type="log4net.Appender.FileAppender"> <!--日志文件名--> <file value="log\log.txt"/> <!--编码方式--> <encoding value =&q

Spring Batch示例: 读取CSV文件并写入MySQL数据库

Spring Batch示例: 读取CSV文件并写入MySQL数据库 GitHub版本: https://github.com/kimmking/SpringBatchReferenceCN/blob/master/01_introduction/Spring_Batch_MySQL.md 原文链接: Reading and writing CVS files with Spring Batch and MySQL 原文作者: Steven Haines - 技术架构师 下载本教程的源代码: S

Spring Batch使用示例: 读取CSV文件并写入MySQL数据库

GitHub版本: https://github.com/kimmking/SpringBatchReferenceCN/blob/master/01_introduction/Spring_Batch_MySQL.md ------------ 编写批处理程序来处理GB级别数据量无疑是种海啸般难以面对的任务,但我们可以用Spring Batch将其拆解为小块小块的(chunk). Spring Batch 是Spring框架的一个模块,专门设计来对各种类型的文件进行批量处理. 本文先讲解一个简

log4net根据日志类型写入到不同的文件中

1 <?xml version="1.0"?> 2 <configuration> 3 <configSections> 4 <!--log4net配置安装--> 5 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 6 </configSection