做项目总是需要记录日志的比如bug、调试信息等等,这样不管是为以后修改bug还是检查程序都是有非常大的帮助的。简单点的项目一般都是自己直接写一个日志工具类,然后直接通过IO来写日志文件或者直接将错误信息存到数据库中。大项目的话自己这套就不太好了,不管是安全方面还是效率方面都存在者很多问题。这里我像大家介绍一个第三方工具:Log4net。
最开始使用是Log4j,这个是Java上的开源日志工具,凭着功能强大、使用简单、易用性强等等优点深的广大开发者的喜爱。也正因为Log4j在Java上的优秀表现,所以才移植到Net平台上。
1、下载Log4net
官方下载: 点击下载
2、Log4net获取DLL文件
下载完成以后解压文件并打开:bin—> net —-> 这里我们可以看到不同版本的.NET FramerWork(下图)。

3、在项目上添加DLL文件引用
根据你项目.NET FramerWork版本来引用(下图)。

4、设置Web.config
<?xml version="1.0" encoding="utf-8"?>
<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<log4net>
<!--定义输出到文件中-->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--定义文件存放位置-->
<file value="log\\"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'"/>
<staticLogFileName value="false"/>
<param name="MaxSizeRollBackups" value="1000"/>
<layout type="log4net.Layout.PatternLayout">
<!--输出格式-->
<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:%-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline"/>
</layout>
</appender>
<!--定义输出到SQL Server数据库中-->
<!--
在SQL Server中创建表的SQL语句
CREATE TABLE [dbo].[Log] (
[Id] [int] IDENTITY (1, 1) NOT NULL,
[Date] [datetime] NOT NULL,
[Thread] [varchar] (255) NOT NULL,
[Level] [varchar] (50) NOT NULL,
[Logger] [varchar] (255) NOT NULL,
[Message] [varchar] (4000) NOT NULL,
[Exception] [varchar] (2000) NULL
);
-->
<appender name="AdoNetAppenderSQLServer" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="Data Source=Sc-201503031243\SQLEXPRESS;Initial Catalog=RoleDemo;Persist Security Info=True;User ID=sa;Password=123;" />
<commandText value="INSERT INTO Log ([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="%thread" />
</layout>
</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="@logger" />
<dbType value="String" />
<size value="255" />
<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="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<root>
<level value="ALL" />
<!--文件形式记录日志-->
<appender-ref ref="RollingLogFileAppender"/>-->
<!--SQL Server数据库形式记录日志-->
<appender-ref ref="AdoNetAppenderSQLServer"/>
</root>
</log4net>
</configuration>
上面是我完整的配置文件,其中以下部分需要修改或注意:
- 在configSections节点下面添加以下节点
<section name=”log4net” type=”System.Configuration.IgnoreSectionHandler”/> - 上面的配置文件实现了2中记录方式:文件日志和数据库日志,具体上面的注释中已经有说明。
- 对于上面的参数详细介绍请查看这里:http://blog.csdn.net/zhoufoxcn/article/details/6029021
5、编写Log4net帮助类
下面是我完整的帮助类代码。
using log4net;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
//注意下面的语句一定要加上,指定log4net使用.config文件来读取配置信息
//如果是WinForm(假定程序为MyDemo.exe,则需要一个MyDemo.exe.config文件)
//如果是WebForm,则从web.config中读取相关信息
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace WebApplication1
{
public class LogHelper
{
/// <summary>
/// 调用Log4net写日志,日志等级为 :错误(Error)
/// </summary>
/// <param name="logContent">日志内容</param>
public static void WriteLog(string logContent)
{
WriteLog(null, logContent, Log4NetLevel.Error);
}
/// <summary>
/// 调用Log4net写日志
/// </summary>
/// <param name="logContent">日志内容</param>
/// <param name="log4Level">记录日志等级,枚举</param>
public static void WriteLog(string logContent, Log4NetLevel log4Level)
{
WriteLog(null, logContent, log4Level);
}
/// <summary>
/// 调用Log4net写日志
/// </summary>
/// <param name="type">类的类型,指定日志中错误的具体类。例如:typeof(Index),Index是类名,如果为空表示不指定类</param>
/// <param name="logContent">日志内容</param>
/// <param name="log4Level">记录日志等级,枚举</param>
public static void WriteLog(Type type, string logContent, Log4NetLevel log4Level)
{
ILog log = type == null ? LogManager.GetLogger("") : LogManager.GetLogger(type);
switch (log4Level)
{
case Log4NetLevel.Warn:
log.Warn(logContent);
break;
case Log4NetLevel.Debug:
log.Debug(logContent);
break;
case Log4NetLevel.Info:
log.Info(logContent);
break;
case Log4NetLevel.Fatal:
log.Fatal(logContent);
break;
case Log4NetLevel.Error:
log.Error(logContent);
break;
}
}
}
/// <summary>
/// log4net 日志等级类型枚举
/// </summary>
public enum Log4NetLevel
{
[Description("警告信息")]
Warn = 1,
[Description("调试信息")]
Debug = 2,
[Description("一般信息")]
Info = 3,
[Description("严重错误")]
Fatal = 4,
[Description("错误日志")]
Error = 5
}
}
6、编写测试代码
//简单写日志
LogHelper.WriteLog("简单写日志");
//写Debug日志
LogHelper.WriteLog("写Debug日志", Log4NetLevel.Debug);
//带有类型和日志等级的日志,Index 是类名
LogHelper.WriteLog(typeof(Index), "带有类型和日志等级的日志", Log4NetLevel.Info);
注意添加引用:
using log4net;
7、测试结果
下面是测试结果 (下图) — 文件日志
运行以上代码以后,我们在项目的根目录下面就会有个log文件夹,

下面是测试结果 (下图) — 数据库日志

8、源代码下载
百度网盘下载:下载地址
提取码:45kr
发布者:IT柚子,转转请注明出处:https://ityouzi.com/archives/csharp-log4net-file-db.html