MVC5中使用Log4net

HomeController.cs

using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Log4NetMVC.Controllers
{
    public class HomeController : Controller
    {
        private static log4net.ILog Log { get; set; }

        ILog log = log4net.LogManager.GetLogger(typeof(HomeController));//类的类型

        public ActionResult Index()
        {
            log.Debug("Debug message");
            log.Warn("Warn message");
            log.Error("Error message");
            log.Fatal("Fatal message");

            return View();
        }

    }
}

Web.config

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

<configuration>

  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <log4net debug="true">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Log\\log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>

运行结果如图:

这里写图片描述


Log4net示例

Program.cs

using System;

namespace Log4NetDemo
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            LogData();
        }

        public static void LogData()
        {
            //记录一般信息
            LogHelper.Info("info");
            //记录调试信息
            LogHelper.Debug("debug");
            //记录警告信息
            LogHelper.Warn("warn");

            //记录错误日志
            LogHelper.Error("error", new Exception("发生了一个异常"));
            //记录严重错误
            LogHelper.Fatal("fatal", new Exception("发生了一个致命错误"));

            Console.WriteLine("日志记录完毕。");
            Console.Read();
        }
    }
}

LogHelper.cs

using System;
using System.IO;
using log4net;
using log4net.Config;

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

namespace Log4NetDemo
{
    /// <summary>
    ///     log4net日志专用
    /// </summary>
    public class LogHelper
    {
        private static readonly ILog Instance = LogManager.GetLogger("logAll");

        public static void SetConfig()
        {
            XmlConfigurator.Configure();
        }

        public static void SetConfig(string filePath)
        {
            var configFile = new FileInfo(filePath);
            XmlConfigurator.Configure(configFile);
        }

        public static void SetConfig(FileInfo configFile)
        {
            XmlConfigurator.Configure(configFile);
        }

        /// <summary>
        ///     记录普通文件记录
        /// </summary>
        /// <param name="info"></param>
        public static void Info(string info)
        {
            if (Instance.IsInfoEnabled)
            {
                Instance.Info(info);
            }
        }

        /// <summary>
        ///     记录调试信息
        /// </summary>
        /// <param name="info"></param>
        public static void Debug(string info)
        {
            if (Instance.IsErrorEnabled)
            {
                Instance.Debug(info);
            }
        }

        /// <summary>
        ///     记录警告信息
        /// </summary>
        /// <param name="info"></param>
        public static void Warn(string info)
        {
            if (Instance.IsWarnEnabled)
            {
                Instance.Warn(info);
            }
        }

        /// <summary>
        ///     记录错误日志
        /// </summary>
        /// <param name="info"></param>
        /// <param name="se"></param>
        public static void Error(string info, Exception se)
        {
            if (Instance.IsErrorEnabled)
            {
                Instance.Error(info, se);
            }
        }

        /// <summary>
        ///     记录严重错误
        /// </summary>
        /// <param name="info"></param>
        /// <param name="se"></param>
        public static void Fatal(string info, Exception se)
        {
            if (Instance.IsFatalEnabled)
            {
                Instance.Fatal(info, se);
            }
        }
    }
}

Log4net.config

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

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <!-- 在框架的体系里,所有的日志对象都是根日志(root logger)的后代。 
    因此如果一个日志对象没有在配置文件里显式定义,则框架使用根日志中定义的属性。
    在<root>标签里,可以定义level级别值和Appender的列表。如果没有定义LEVEL的值,
    则缺省为DEBUG。可以通过<appender-ref>标签定义日志对象使用的Appender对象。
    <appender-ref>声明了在其他地方定义的Appender对象的一个引用。
    在一个logger对象中的设置会覆盖根日志的设置。
    而对Appender属性来说,子日志对象则会继承父日志对象的Appender列表。
    这种缺省的行为方式也可以通过显式地设定<logger>标签的additivity属性为false而改变。-->
    <root>
      <!--设置log级别:OFF(不会产生日志),ALL,DEBUG,INFO,WARN,ERROR,FATAL-->
      <!--设置记录所有级别的日志-->
      <level value="ALL" />
      <!--设置记录错误及更高等级的日志-->
      <!--<level value="ERROR" />-->

      <!--文件形式记录日志-->
      <appender-ref ref="LogFileAppender" />
      <!--控制台控制显示日志-->
      <!--<appender-ref ref="ConsoleAppender" />-->
      <!--Windows事件日志-->
      <!--<appender-ref ref="EventLogAppender" />-->
      <!--SQLite日志-->
      <!--<appender-ref ref="AdoNetAppender_SQLite" />-->
      <!--RollingFileAppender事件日志-->
      <!--<appender-ref ref="RollingFileAppender" />-->
      <!--RollingFileAppender事件日志,每天一个日志-->
      <!--<appender-ref ref="RollingLogFileAppender_DateFormat" />-->
      <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉  -->
      <!--<appender-ref ref="AdoNetAppender_Access" />-->

    </root>
    <!-- 元素预定义了一个具体日志对象的设置。
            然后通过调用LogManager.GetLogger(“testAPP.Logging”)函数,
            你可以检索具有该名字的日志。如果LogManager.GetLogger(…)打开的不是预定义的日志对象,
            则该日志对象会继承根日志对象的属性。知道了这一点,我们可以说,
            其实<logger>标签并不是必须的。-->
    <!--<logger name="logAll">
      <level value="All"/>
      <appender-ref ref="LogFileAppender"/>

    </logger>-->

    <!--定义输出到文件中-->
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <!--每条日志末尾的文字说明-->
      <!--<footer value="by 周公" />-->
      <!--定义文件存放位置-->
      <file value="LogFile\LogFileAppender_log.txt" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <!--每条日志末尾的文字说明-->
        <!--<footer value="by 周公" />-->
        <!--输出格式-->
        <!--样例:2010-11-17 15:50:23,443 [9] (D:/CSProjects/Log4NetDemo/Log4NetDemo/Program.cs:27) FATAL Log4NetDemo.Program [(null)] - fatal  
System.Exception: 在发生了一个致命错误,Exception Id:548828745-->
        <conversionPattern
          value="记录时间:%date 线程ID:[%thread] 日志级别:文件:所在行%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
      </layout>
    </appender>
    <!--定义输出到控制台命令行中-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--使用Rolling方式记录日志  
    每个日志文件最大100KB,生成的日志文件名会是log.txt.1,log.txt.2 ...log.txt.10  
    如果记录的日志超过10个,会从log.txt.1开始覆盖  
    -->
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="LogFile\RollingFileAppender_log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="100KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--使用Rolling方式记录日志  
    按照日来记录日志  
    -->
    <appender name="RollingLogFileAppender_DateFormat" type="log4net.Appender.RollingFileAppender">
      <file value="LogFile\RollingLogFileAppender_DateFormat_log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <!--<datePattern value="yyyyMMdd-HHmm" />-->
      <!--<datePattern value="yyyyMMdd" />-->
      <datePattern value="yyyyMM" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread](%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>

    <!--记录到SQLite这样的单机数据库中去  
    创SQLite表的SQL语句:  
    CREATE TABLE Log (  
    LogId        INTEGER PRIMARY KEY,  
    Date        DATETIME NOT NULL,  
    Level        VARCHAR(50) NOT NULL,  
    Logger        VARCHAR(255) NOT NULL,  
    Source        VARCHAR(255) NOT NULL,  
    Message        TEXT DEFAULT NULL  
    );  
    -->
    <appender name="AdoNetAppender_SQLite" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="100" />
      <connectionType
        value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.66.0, Culture=neutral" />
      <!--SQLite连接字符串-->
      <connectionString value="Data Source=c://log4net.db;Version=3;" />
      <commandText
        value="INSERT INTO Log (Date, Level, Logger,Source, Message) VALUES (@Date, @Level, @Logger, @Source, @Message)" />
      <parameter>
        <parameterName value="@Date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@Level" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Logger" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Source" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%file:%line" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Message" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
    </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="AdoNetAppender_SQLServer" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="100" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data" />
      <connectionString
        value="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]" />
      <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>
    <!--定义输出到Oracle9i中-->
    <!--  
    在Oracle9i中创建表的SQL语句  
    create table log (  
   Datetime timestamp(3),  
   Thread varchar2(255),  
   Log_Level varchar2(255),  
   Logger varchar2(255),  
   Message varchar2(4000)  
   );  
    -->
    <appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
      <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient" />
      <connectionString value="data source=[mydatabase];User ID=[user];Password=[password]" />
      <commandText
        value="INSERT INTO Log (Datetime,Thread,Log_Level,Logger,Message) VALUES (:log_date, :thread, :log_level, :logger, :message)" />
      <bufferSize value="128" />
      <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>
    </appender>
    <!--定义输出到IBM DB2中-->
    <!--  
    在DB2中创建表的SQL语句  
    CREATE TABLE "myschema.LOG" (  
    "ID" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (  
        START WITH +1  
        INCREMENT BY +1  
        MINVALUE +1  
        MAXVALUE +2147483647  
        NO CYCLE  
        NO CACHE  
        NO ORDER  
    ),  
    "DATE" TIMESTAMP NOT NULL,  
    "THREAD" VARCHAR(255) NOT NULL,  
    "LEVEL" VARCHAR(500) NOT NULL,  
    "LOGGER" VARCHAR(255) NOT NULL,  
    "MESSAGE" VARCHAR(4000) NOT NULL,  
    "EXCEPTION" VARCHAR(2000)  
)  
IN "LRGTABLES";  
    -->
    <appender name="AdoNetAppender_DB2" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="100" />
      <connectionType value="IBM.Data.DB2.DB2Connection,IBM.Data.DB2" />
      <connectionString
        value="server=192.168.0.0;database=dbuser;user Id=username;password=password;persist security info=true" />
      <commandText
        value="INSERT INTO myschema.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="500" />
        <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>
    <!--定义输出到windows事件中-->
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb  
    创建Access表的SQL语句:  
    -->
    <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
      <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/log4net.mdb" />
      <commandText
        value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
      <!--定义各个参数-->
      <parameter>
        <parameterName value="@logDate" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logLevel" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
    </appender>
    <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->

  </log4net>

</configuration>

packages.config

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

<packages>
  <package id="log4net" version="2.0.3" targetFramework="net45" />
</packages>

如图:

这里写图片描述

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值