• LogNet4学习笔记


    LogNet是一套开源的程序日志记录系统,经过配置后可以自动抓取程序中的错误、异常信息,并写入磁盘,也可以在异常发生时执行其他指定的操作,比如:通知某人右键、写入数据库等。

    这里写个AspNet应用LogNet的Demo:

    1.建立AspNet网站,在web.config中写LogNet的配置文件:

    <?xml version="1.0"?>
    <configuration>
        <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
        </configSections>
      
        <log4net>
            <!--错误日志配置-->
            <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
                <param name="File" value="Log\LogError\"/>    <!--文件路径-->
                <param name="AppendToFile" value="true"/>
                <param name="MaxSizeRollBackups" value="100"/>
                <param name="MaxFileSize" value="10240"/>
                <param name="StaticLogFileName" value="false"/>
                <param name="DatePattern" value="yyyyMMdd"/>
                <param name="RollingStyle" value="Date"/>
                <layout type="log4net.Layout.PatternLayout">
                    <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异 常 类:%c [%x] %n%m %n "/>
                </layout>
            </appender>
            <!--信息日志配置-->
            <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
                <param name="File" value="Log\LogInfo\"/>     <!--文件路径-->
                <param name="AppendToFile" value="true"/>
                <param name="MaxFileSize" value="10240"/>
                <param name="MaxSizeRollBackups" value="100"/>
                <param name="StaticLogFileName" value="false"/>
                <param name="DatePattern" value="yyyyMMdd"/>
                <param name="RollingStyle" value="Date"/>
                <layout type="log4net.Layout.PatternLayout">
                    <param name="ConversionPattern" value="%n日志时间:%d [%t] %n日志级别:%-5p %n日 志 类:%c [%x] %n%m %n"/>
                </layout>
            </appender>
            <!--控制台-->
            <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline"/>
                </layout>
            </appender>
            <!--log4net.LogManager.GetLogger("logerror")用这个来选择这种类型-->
            <logger name="logerror">
                <level value="ERROR"/>
                <appender-ref ref="ErrorAppender"/>
            </logger>
        <!--log4net.LogManager.GetLogger("loginfo")用这个来选择这种类型-->
            <logger name="loginfo">
                <level value="INFO"/>
                <appender-ref ref="InfoAppender"/>
            </logger>
            <root>
                <level value="INFO"/>
                <appender-ref ref="InfoAppender"/>
                <appender-ref ref="ConsoleAppender"/>
            </root>
        </log4net>
        <system.web>
            <compilation debug="true"/></system.web></configuration>

    2.建立日志记录Log类库,实现方法

    /// <summary>   
        /// LogHelper的摘要说明。   
        /// </summary>   
        public class LogHelper
        {
            private LogHelper()
            {
            }
    
            public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");   //选择<logger name="loginfo">的配置 
    
            public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");   //选择<logger name="logerror">的配置 
    
    
            /// <summary>
            /// 默认配置。按配置文件
            /// </summary>
            public static void SetConfig()
            {
                log4net.Config.XmlConfigurator.Configure();
            }
    
            /// <summary>
            /// 手动设置,作用未知
            /// </summary>
            /// <param name="configFile"></param>
            public static void SetConfig(FileInfo configFile)
            {
                log4net.Config.XmlConfigurator.Configure(configFile);
            }
    
            /// <summary>
            /// 写信息。
            /// </summary>
            /// <param name="info"></param>
            public static void WriteLog(string info)
            {
                if (loginfo.IsInfoEnabled)
                {
                    loginfo.Info(info);
                }
            }
    
            /// <summary>
            /// 写日志。出错时会写入
            /// </summary>
            /// <param name="info"></param>
            /// <param name="se"></param>
            public static void WriteLog(string info, Exception se)
            {
                if (logerror.IsErrorEnabled)
                {
                    logerror.Error(info, se);
                }
            }
        }

    3.在网站的Global.asax中配置网站与LogNet的联系。

    public class Global : System.Web.HttpApplication
        {
            void Application_End(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,则不会引发该事件。
    
            }
    
            /// <summary>
            /// 程序启动时配置lognet
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void Application_Start(Object sender, EventArgs e)
            {
                //若不想把lognet配置文件写在web.config中,也可以另外手动指定。
                //XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/App_Data/log4net.config")));
            }
    
            /// <summary>
            /// 程序出错时通过lognet写日志
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void Application_Error(Object sender, EventArgs e)
            {
                Exception objExp = HttpContext.Current.Server.GetLastError();
                LogHelper.WriteLog("
    客户机IP:" + Request.UserHostAddress 
                    + "
    错误地址:" + Request.Url 
                    + "
    异常信息:" + Server.GetLastError().Message, objExp);
            }
        }

    这样,当网站出错时,就会自动在网站目录的LogLogError与LogInfo下写如文本日志。

  • 相关阅读:
    Android开发环境
    安卓学习
    Shuffle'm Up POJ
    Duizi and Shunzi HDU
    Find a path HDU
    Cyclic Nacklace HDU
    Keywords Search HDU
    HDU 1495 非常可乐
    J
    Fire Game FZU
  • 原文地址:https://www.cnblogs.com/weifeng123/p/8118167.html
Copyright © 2020-2023  润新知