配置步骤:
(1)把log4net加入到引用,可以去官网下:点击打开链接
或者使用 NuGet 自动添加最新dll
(2)应用程序配置文件作如下配置,例如web.config中
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<!--配置到记事本中-->
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<file value="Log/log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<!--最大保留10个备份文件-->
<maxSizeRollBackups value="10" />
<!--日志超过100KB就创建1个备份文件-->
<maximumFileSize value="100KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<!--配置到数据库中-->
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<!--开发的时候bufferSize的value设置为1,项目上线的时候改大点,例如:100,意思是缓存到100条日志的时候才往数据库一次性将100条插入数据库,设置为1的话访问数据库频繁会增加数据库的负担-->
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<!--数据库连接参数-->
<connectionString value="data source=.;initial catalog=AppBox;integrated security=false;persist security info=True;User ID=sa;Password=123" />
<!--注意这里Log为数据库中的日志表-->
<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>
<!--日志级别,None>Fatal>ERROR>WARN>DEBUG>INFO>ALL,设定一个Level,那么低于这个Level的日志是不会被写到Appender中的-->
<level value="All" />
<appender-ref ref="RollingFileAppender"/>
<appender-ref ref="AdoNetAppender"/>
</root>
</log4net>
</configuration>
(3)如果是WebApplication项目, 在global.asax里面新增配置:
protected void Application_Start(Object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
}
如果是WebSites项目和winform项目或者控制台项目,要在AssemblyInfo.cs 新增
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
或者:[assembly: log4net.Config.XmlConfigurator()] (把log4net的配置配置在web的配置文件时)
(4)若配置了数据库方式,则执行以下SQL语句建立Log表:
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
)
(5)如何记录日志
控制台项目:
using log4net;
using log4net.Config;
public class MyApp
{
// Define a static logger variable so that it references the
// Logger instance named "MyApp".
private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));
static void Main(string[] args)
{
// Set up a simple configuration that logs on the console.
BasicConfigurator.Configure();
log.Info("Entering application.");
Bar bar = new Bar();
bar.DoIt();
log.Info("Exiting application.");
}
}
Web项目:
using log4net;
namespace Com.Foo
{
public class Bar
{
private static readonly ILog log = LogManager.GetLogger(typeof(Bar));
public void DoIt()
{
log.Debug("Did it again!");
}
}
}