ASP.NET MVC4 Web項目中使用Log4Net記錄日志到文件和數據庫。


下載與.netframework版本向對應的log4net.dll ,然后添加引用。下載地址:http://logging.apache.org/log4net/download_log4net.cgi

下載:log4net-2.0.8-bin-newkey.zip,然后找到對應的版本的DLL.

 

1.新建一個空的mvc4應用項目。

2.新建一個log4net.config配置文件,數據庫的連接字符串改一下。

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

<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=LJJ-FF\LJJ;Initial Catalog=TestMvc;User ID=sa;Password=111111" />
        <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>

3.在web.config中的<configuration>節點下面添加:

<configSections>
<section name="log4net"  type="System.Configuration.IgnoreSectionHandler"/>
</configSections>

4.在Global.asax下面添加下面代碼:

  //應用程序啟動時,自動加載配置log4Net  
            XmlConfigurator.Configure();  

5.在AssemblyInfo.cs 下面添加代碼:

//[assembly: log4net.Config.XmlConfigurator(Watch = true)]
//注意: ConfigFile 可以指定相對路徑 和 絕對路徑。 eg: /log/xxxx.log  或者 d://log//xxxx.log
//這句話是把節點單獨拆分成log4net.config,這里像下面這樣寫。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
//這個是log4net配置文件節點寫在web.config里面用這句話
//[assembly: log4net.Config.XmlConfigurator(Watch = true)]

6.新建LogHelper類:

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

namespace MvcLog4netToDataBase
{
    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
    }
}


7.建HomeController

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

namespace MvcLog4netToDataBase.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            //簡單寫日志
            LogHelper.WriteLog("簡單寫日志");
            //寫Debug日志
            LogHelper.WriteLog("寫Debug日志", Log4NetLevel.Debug);
            //帶有類型和日志等級的日志,Index 是類名
            LogHelper.WriteLog(typeof(HomeController), "帶有類型和日志等級的日志", Log4NetLevel.Info);
            return View();
        }

    }
}

8.建一個Index視圖。

9.運行得出結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM