前言

几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。

经验表明,日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。另外,日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。

Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。

官方网站:http://logging.apache.org/log4net/

一、Log4net的安装

直接使用Nuget安装。

二、Log4net的配置

1、新建配置文件log4net.config

2、将log4net.config的属性“复制到输出目录”设置为“始终复制”

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<configSections>
		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
	</configSections>

	<log4net>
		<!--日志保存到文件配置-->
		<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" LEVEL="ERROR">
			<!--日志路径-->
			<param name= "File" value= "D:\App_Log\"/>
			<!--是否是向文件中追加日志-->
			<param name= "AppendToFile" value= "true"/>
			<!--log保留天数-->
			<param name= "MaxSizeRollBackups" value= "100"/>
			<!--log文件大小限制-->
			<maximumFileSize value="1MB" />
			<!--日志文件名是否是固定不变的-->
			<param name= "StaticLogFileName" value= "false"/>
			<!--日志文件名格式为:2008-08-31-13.log-->
			<param name= "DatePattern" value= "yyyy-MM-dd-HH&quot;.log&quot;"/>
			<!--日志滚动方式综合-->
			<param name="RollingStyle" value="Composite" />
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n%n " />
			</layout>
		</appender>

		<!--日志保存到数据库配置-->
		<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
			<bufferSize value="100" />
			<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
			<connectionString value="data source=10.96.3.7;initial catalog=Isoft;integrated security=false;persist security info=True;User ID=sa;Password=SMES@CQ" />
			<commandText value="INSERT INTO SysLog ([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>
			<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
			<level value="all" />
			<appender-ref ref="RollingLogFileAppender"/>
			<appender-ref ref="AdoNetAppender"/>
		</root>
	</log4net>
</configuration>

三、调用

using log4net;
using log4net.Config;
[assembly: XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
//在namespace 前引用。也可以在AssemblyInfo.cs里引用
namespace MyLog4net
{
	public class MyLog4net
	{
		public void Log4testDomo()
		{
			ILog Ilog = LogManager.GetLogger("Ilog");
			Ilog.Error("异常");
			Ilog.Info("描述");
			Ilog.Debug("调试");
			Ilog.Fatal("错误");
			Ilog.Warn("警告");
		}
	}
}