zoukankan      html  css  js  c++  java
  • 日志 log4net

    先引入log4net

    接着配置configuration文件

    <?xml version="1.0"?>
    <configuration>

        <system.web>
            <compilation debug="true" targetFramework="4.0" />
        </system.web>
     <log4net debug="false">

      <!--按日期分割日志文件 一天一个-->
      <appender name="LogFileAppenderByDate" type="log4net.Appender.RollingFileAppender" >
       <!--是否续写-->
       <param name="AppendToFile" value="true" />
       <!--最小锁定模型以允许多个进程可以写入同一个文件-->
       <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
       <param name="StaticLogFileName" value="true" />
       <!--保存路径-->
       <param name="File" value="F:Log\" />
       <param name="DatePattern" value="yyyy-MM-dd.LOG" />
       <param name="StaticLogFileName" value="false" />
       <param name="RollingStyle" value="Date" />
       <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
       </layout>
      </appender>

      <!--按日志容量分割日志文件 10KB一个-->
      <appender name="LogFileAppenderBySize" type="log4net.Appender.RollingFileAppender" >

       <!--是否续写-->
       <param name="AppendToFile" value="true" />
       <!--最小锁定模型以允许多个进程可以写入同一个文件-->
       <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />

       <param name="StaticLogFileName" value="true" />

       <!--按照文件的大小进行变换日志文件-->
       <param name="RollingStyle" value="Size" />
       <param name="File" value="LogData\log.txt" />
       <!--单个文件最大数量 好像只有在 按Size分割时有效-->
       <param name="MaximumFileSize" value="10KB"/>
       <!--保留的log文件数量 超过此数量后 自动删除之前的   好像只有在 按Size分割时有效-->
       <param name="MaxSizeRollBackups" value="2" />

       <param name="StaticLogFileName" value="false" />
       <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="发生时间:%d %n事件级别:%level %n相关类名:%c%n程序文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%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=LKYKJYXG-341C59LKY;database = ITweb;Integrated security = true;" />
       <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="INFO" />
       <!--启用按日期分割-->
       <appender-ref ref="LogFileAppenderByDate" />
       <!--启用按容量分割-->
       <!--<appender-ref ref="LogFileAppenderBySize" />-->
       <!--启用保存到数据库-->
       <appender-ref ref="AdoNetAppender" />
      </root>
     </log4net>
    </configuration>

    2.在Global.asax文件下写入代码 

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.SessionState;
    using System.IO;
    
    namespace WebApplication1
    {
        public class Global : System.Web.HttpApplication
        {
    
            void Application_Start(object sender, EventArgs e)
            {
                // 在应用程序启动时运行的代码
                log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Server.MapPath("/log4nethh.config")));
    
            }
    
            void Application_End(object sender, EventArgs e)
            {
                //  在应用程序关闭时运行的代码
    
            }
    
            void Application_Error(object sender, EventArgs e)
            {
                // 在出现未处理的错误时运行的代码
    
            }
    
            void Session_Start(object sender, EventArgs e)
            {
                // 在新会话启动时运行的代码
    
            }
    
            void Session_End(object sender, EventArgs e)
            {
                // 在会话结束时运行的代码。 
                // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
                // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
                // 或 SQLServer,则不会引发该事件。
    
            }
    
        }
    }
    复制代码

      

    3.写入LogHelper类 

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using log4net;
    
    namespace WebApplication1
    {
    
        /// <summary>
        /// 日志辅助类
        /// </summary>
        public class LogHelper
        {
            private static ILog log;
            private static LogHelper logHelper = null;
            /// <summary>
            /// 初始化
            /// </summary>
            /// <returns></returns>
            public static ILog GetInstance()
            {
                logHelper = new LogHelper(null);
    
                return log;
            }
            /// <summary>
            /// 初始化
            /// </summary>
            /// <param name="configPath"></param>
            /// <returns></returns>
            public static ILog GetInstance(string configPath)
            {
                logHelper = new LogHelper(configPath);
    
                return log;
            }
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="configPath"></param>
            private LogHelper(string configPath)
            {
                if (!string.IsNullOrEmpty(configPath))
                {
                    log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
                    log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(configPath));
                }
                else
                {
                    log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
                }
            }
    
    
        }
    }
    复制代码

      

    4.使用Log4net的方法(下面的可以写为一个方法,哪里使用哪里调用。)

    复制代码
     Exception exp = Server.GetLastError();
                string strE = "
    堆栈:" + exp.StackTrace + "
     " + "Message:" + exp.Message + "
     来源:" + exp.Source + "
     来源:" + Request.Url;
                Response.Write(strE);
                // 在事件日志中记录异常信息           
                ILog log = LogHelper.GetInstance();
                log.Warn(strE);
                Server.ClearError();
                Server.Transfer("Error.aspx", false);
  • 相关阅读:
    Docker
    java 8 特性
    RISC-V: custom instruction and its simulation(转)
    如何在GCC中添加一条RISC-V指令(转)
    The GNU MCU Eclipse RISC-V Embedded GCC build
    Adding custom instruction to RISCV ISA and running it on gem5 and spike(转)
    How to add a custom instruction to the RISC-V GCC tools?(转)
    Adding and using a new instruction
    vuex2
    jq 显示/隐藏 某个模块
  • 原文地址:https://www.cnblogs.com/makqiq/p/6136311.html
Copyright © 2011-2022 走看看