• 笔试考试系统--项目搭建及用Log4Net记录日志


    项目架构搭建
    一、项目整体采用分层结构,不搞传统的三层架构,直接用Ul+Service (只是根据项目的不同的变体而已,思想上没什么不-样),建ExamOnLine.Common、ExamOnLine.IService、ExamOnLine. Service、ExamOnLine.DTO、 ExamOnLine.Front.Web、ExamOnLine.Admin.Web、 ExamOnLine.UnitTest(单元测试可以后期再搭)

    效果如下:

     搭建完成后一定不要忘了各个项目之间的引用

    UI层也要安装EF 层之间添加引用:

    ExamOnLine.Iservice层添加:对DTO层的引用、

    ExamOnLine.Service层添加:对ExamOnLine.Iservice、ExamOnLine.ZSZ.DTO的引用

    ExamOnLine.ExamOnLine.AdminWeb层添加:ExamOnLine.Iservice、ExamOnLine.Service、ExamOnLine.Common、ExamOnLine..DTO引用

    ExamOnLine.Front.Web与ExamOnLine..Admin.Web一样

    添加引用步骤如下:

    二、配置Log4Net;(前后台都配置)

    搭建ExceptionFilter 打印到Log4Net未处理异常;把EF的日志通过Debug方式打印到Log4Net;具开发EF实体部分:然后编写单元测试,确保运行没问题;后面用的时候都下Database .Setlnitializer<XXXDbContext>(null)

     (一)先给大家介绍下Log4Net简介:

    1:什么是日志,为什么需要记录日志?

    2:Log4NET 是一个从 Java 版的 Log4J 移植过来的日志框架,可以简化日志的记录;

    3、 Log4NET 的概念:

    a) 级别:trace、debug、info、warn、error、fatal。常用 debug(调试信息,程序员临 时跟踪执行,在正式运行的项目中应该不显示);warn(警告);error(错误)。

    b) 特殊的级别:all(全部显示);off(全部不显示);

    c) appender:可以把日志输出到控制台、文件、数据库、ftp 服务器,甚至可以把日 志输出到邮件、短信等。不同的输出场景就是不同的 appender,可以添加多个 appender,可以设定不同的级别级别使用不同的 appender

    (二)Log4Net使用步骤:

    1:添加Install-Package Log4NET

    2:如果 NuGet 没有给自动配置 App.config,那么就要在<configuration>的<configSections>节点下 新 增 ( 要 在 头 部 ) : <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />

    3:在webConfig里面添加子节点(在configuration下添加),具体代码如下:

    <log4net>
        <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
        <!-- Set root logger level to ERROR and its appenders -->
        <root>
          <level value="DEBUG" />
          <appender-ref ref="RollingFileTracer" />
        </root>
        <!-- Print only messages of level DEBUG or above in the packages -->
        <appender name="RollingFileTracer" type="log4net.Appender.RollingFileAppender,log4net">
          <param name="File" value="App_Data/Log/" />
          <param name="AppendToFile" value="true" />
          <param name="RollingStyle" value="Composite" />
          <param name="MaxSizeRollBackups" value="10" />
          <param name="MaximumFileSize" value="1MB" />
          <param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
          <param name="StaticLogFileName" value="false" />
          <layout type="log4net.Layout.PatternLayout,log4net">
            <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
          </layout>
        </appender>
      </log4net>

    4:在程序启动的时候:log4net.Config.XmlConfigurator.Configure();。容易忘,如果发现日志文件一直没有,先想是不是忘了写这句话。

    5:记 录 信 息 : ILog logger = LogManager.GetLogger(typeof(WebForm1));

    logger.Debug("aaaaaaaaaaaaaa");

    6:性能优化: logger.DebugFormat(“hello {0} {}”,"hello")等。 用{n}占位符,而不是字符串拼接,这样如果配置中不输出这个级别的时候,就不会进行字符串拼接,提升性能。

    (三)搭建 ExceptionFilter 打印到 Log4Net 记录Action未处理的异常;把 EF 的日志通过Debug 方式打印到 Log4Net,原理如下:

     具体配置步骤:

    1:新建一个类,在App_Start里面

    using log4net;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace ExamOnLine.Admin.Web.App_Start
    {
        public class ExamOnLineExceptionFilter : IExceptionFilter
        {
            private static ILog log = LogManager.GetLogger(typeof(ExamOnLineExceptionFilter));//声明Log4NET对象,建议一个类就声明一个ILog对象
    
            public void OnException(ExceptionContext filterContext)
            {
                //只要action出现未处理的异常,这个方法里面都可以捕获到
                log.ErrorFormat("出现未处理的异常{0}", filterContext.Exception);
            }
        }
    }

    2:在global里面添加 GlobalFilters.Filters.Add(new ZSZExceptionFilter()); //增加自定义异常处理器

    using ExamOnLine.Admin.Web.App_Start;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
    
    namespace ExamOnLine.Admin.Web
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                //如果发现日志文件一直没有,先想是不是忘了写这句话。
                log4net.Config.XmlConfigurator.Configure();
                 GlobalFilters.Filters.Add(new ExamOnLineExceptionFilter()); //增加自定义异常处理器
    
                AreaRegistration.RegisterAllAreas();
                RouteConfig.RegisterRoutes(RouteTable.Routes);
            }
        }
    }

    这样就可以了

    今天的博文就到这里,明天给大家分享如何配置EF,配置EF;编写实体公共父类

  • 相关阅读:
    【Selenium-WebDriver实战篇】java测试使用HttpClient debug日志关闭
    【Selenium-WebDriver实战篇】selenium之使用Tess4J进行验证码图片识别内容
    【Selenium-WebDriver实战篇】基于java的selenium之验证码识别内容
    【自动化测试网址】相关学习网址和定期更新(更新中...)
    【Selenium-WebDriver实战篇】ScreenRecorder的实际输出路径,自己的解决方案
    【Selenium-WebDriver实战篇】ScreenRecorder的实际输出路径设置(转)
    【Selenium-WebDriver实战篇】Eclipse上的maven使用JsonObject时,添加依赖后无法自动下载相应的jar包
    【AirTest自学】AirTest工具介绍和入门学习(一)
    【测试面试】人脸识别的测试重点
    selenium中隐式等待和显示等待的区别
  • 原文地址:https://www.cnblogs.com/JuneDream/p/13307194.html
Copyright © 2020-2023  润新知