首页 > 代码库 > Log4Net

Log4Net

在WinForm或Console应用程序中,要使用Log4Net组件,需要在AssembleInfo.cs文件中添加如下代码,表示要使用的配置文件信息:

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

使用Log4Net组件,主要的是要会配置Appender

<?xml version="1.0" encoding="utf-8" ?><configuration>    <startup>         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />    </startup>    <configSections>        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, Log4net" />    </configSections>  <log4net>    <!-- 使用RollingFileAppender循环记录日志 -->    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">      <!--自定义log文件名及log文件存储路径-->      <file  type="log4net.Util.PatternString" value=http://www.mamicode.com/"e:/log/%date{yyyy-MM-dd}.txt" />      <appendToFile value=http://www.mamicode.com/"true" />      <!-- 每个日志文件最大1MB -->      <maximumFileSize value=http://www.mamicode.com/"1MB" />      <!--            最大日志文件个数是10。如果日志文件大于1M,则会生成一个新的日志文件:yyyy-MM-dd.txt.1,           如果记录的日志超过10个,会从yyyy-MM-dd.txt.1开始覆盖。      -->      <maxSizeRollBackups value=http://www.mamicode.com/"10" />      <!-- 根据文件大小循环生成日志文件 -->      <rollingStyle value=http://www.mamicode.com/"Size" />            <layout type="log4net.Layout.PatternLayout">                <!--        关于使用log4net中可能会使用到的一些参数            %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息             %n(new line):换行             %d(datetime):输出当前语句运行的时刻             %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数             %t(thread id):当前语句所在的线程ID             %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等             %c(class):当前日志对象的名称,例如:            %f(file):输出语句所在的文件名。            %l(line):输出语句所在的行号。            %数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。        -->              <conversionPattern value=http://www.mamicode.com/"%date [%thread] %-5level %logger [%ndc] - %message%newline" />      </layout>    </appender>    <!-- 定义输出到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] [nvarchar](255) NOT NULL,              [Message] [nvarchar](4000) NOT NULL,              [Exception] [ntext] NULL          ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]     -->      <appender name="AdoNetAppender_SQLServer" type="log4net.Appender.AdoNetAppender">        <!-- 先把日志内容记录到内存缓冲集合中,当集合长度为100时,一次性写入数据库,提高性能 -->      <bufferSize value=http://www.mamicode.com/"100" />        <connectionType value=http://www.mamicode.com/"System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />        <connectionString value=http://www.mamicode.com/"Data Source=SHZ-PC\SQLSERVER2008;Initial Catalog=Log4Net;integrated security=false;Persist Security Info=True;User ID=sa;Password=sa" />        <commandText value=http://www.mamicode.com/"INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />        <parameter>          <parameterName value=http://www.mamicode.com/"@log_date" />          <dbType value=http://www.mamicode.com/"DateTime" />          <layout type="log4net.Layout.RawTimeStampLayout" />        </parameter>        <parameter>          <parameterName value=http://www.mamicode.com/"@thread" />          <dbType value=http://www.mamicode.com/"String" />          <size value=http://www.mamicode.com/"255" />          <layout type="log4net.Layout.PatternLayout">            <conversionPattern value=http://www.mamicode.com/"%thread" />          </layout>        </parameter>        <parameter>          <parameterName value=http://www.mamicode.com/"@log_level" />          <dbType value=http://www.mamicode.com/"String" />          <size value=http://www.mamicode.com/"50" />          <layout type="log4net.Layout.PatternLayout">            <conversionPattern value=http://www.mamicode.com/"%level" />          </layout>        </parameter>        <parameter>          <parameterName value=http://www.mamicode.com/"@logger" />          <dbType value=http://www.mamicode.com/"String" />          <size value=http://www.mamicode.com/"255" />          <layout type="log4net.Layout.PatternLayout">            <conversionPattern value=http://www.mamicode.com/"%logger" />          </layout>        </parameter>        <parameter>          <parameterName value=http://www.mamicode.com/"@message" />          <dbType value=http://www.mamicode.com/"String" />          <size value=http://www.mamicode.com/"4000" />          <layout type="log4net.Layout.PatternLayout">            <conversionPattern value=http://www.mamicode.com/"%message" />          </layout>        </parameter>        <parameter>          <parameterName value=http://www.mamicode.com/"@exception" />          <dbType value=http://www.mamicode.com/"String" />          <size value=http://www.mamicode.com/"20000" />          <layout type="log4net.Layout.ExceptionLayout" />        </parameter>      </appender>      <!-- 通过邮件发送日志 -->    <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">      <authentication value=http://www.mamicode.com/"Basic" />      <!-- 收件人邮箱,多个邮箱以“,”分隔 -->      <to value=http://www.mamicode.com/"test@sina.cn" />      <!-- 发件人邮箱 -->      <from value=http://www.mamicode.com/"1111111111@qq.com" />      <!-- 发件人邮箱 -->      <username value=http://www.mamicode.com/"1111111111@qq.com" />      <!-- 发件人邮箱密码 -->      <password value=http://www.mamicode.com/"1111111111" />      <!-- 邮件主题 -->      <subject value=http://www.mamicode.com/"XXX系统异常报告" />      <!-- 发送邮件的服务器 -->      <smtpHost value=http://www.mamicode.com/"smtp.qq.com" />      <!-- 内存中的日志缓冲区满100条才发送一次邮件 -->      <bufferSize value=http://www.mamicode.com/"100" />      <!--超长部分是否丢弃-->      <lossy value=http://www.mamicode.com/"true" />      <!-- 下面的定义, 就是 日志级别 大于 WARN 的, 才发邮件.  -->      <evaluator type="log4net.Core.LevelEvaluator">          <threshold value=http://www.mamicode.com/"WARN"/>      </evaluator>      <layout type="log4net.Layout.PatternLayout">          <conversionPattern value=http://www.mamicode.com/"%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />      </layout>    </appender>        <root>      <!--          定义记录日志的级别,该级别(含)以上的日志会被记录到对应的媒介中,取值有INFO,DEBUG,WARN,ERROR,FETAL,ALL          注意:如果定义为INFO,则DEBUG信息并不会记录到媒介中。如果定义为DEBUG,则全部级别都会记录。      -->      <level value=http://www.mamicode.com/"ALL" />      <appender-ref ref="RollingLogFileAppender" />      <appender-ref ref="AdoNetAppender_SQLServer" />      <appender-ref ref="SmtpAppender" />    </root>  </log4net></configuration>

LogHelper文件代码

技术分享
using log4net;using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;namespace LearnLog4Net{    public static class LogHelper    {        private static ILog log;        static LogHelper()        {            log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);        }        public static void WriteInfo(object message)        {            if(log.IsInfoEnabled)            {                log.Info(message);            }        }        public static void WriteDebug(object message)        {            if (log.IsDebugEnabled)            {                log.Debug(message);            }        }        public static void WriteWarn(object message)        {            if(log.IsWarnEnabled)            {                log.Warn(message);            }        }        public static void WriteError(object message)        {            WriteError(message, null);        }        public static void WriteError(object message,Exception ex)        {            if(log.IsErrorEnabled)            {                log.Error(message, ex);            }        }        public static void WriteFetal(object message)        {            if(log.IsFatalEnabled)            {                log.Fatal(message);            }        }    }}
View Code

 

Log4Net