日志记录显然是框架设计中不可或缺的元素,在本框架中,我们将使用log4net作为日志记录的主体。下面来具体说明如何让框架继承log4net,并通过Autofac进行IOC注入。

首先,定义好我们的Log日志操作接口:

   1:  public interface ILoggerService
   2:      {
   3:          void Info(string message);
   4:          void Warn(string message);
   5:          void Debug(string message);
   6:          void Error(string message);
   7:          void Error(Exception ex);
   8:          void Fatal(string message);
   9:          void Fatal(Exception ex);
  10:      }

具体的解释我就不用说了,其中Info代表正常日志,Warn代表告警日志,Debug代表调试日志,Error代表错误日志,Fatal代表系统崩溃日志。

下面是其实现部分:

   1:  public class LoggerService:ILoggerService
   2:      {
   3:          public LoggerService()
   4:          {
   5:              log4net.Config.XmlConfigurator.Configure();
   6:              logger = LogManager.GetLogger(typeof(LoggerService));
   7:          }
   8:   
   9:          private readonly ILog logger;
  10:   
  11:          public void Info(string message)
  12:          {
  13:              logger.Info(message);
  14:          }
  15:          public void Warn(string message)
  16:          {
  17:              logger.Warn(message);
  18:          }
  19:          public void Debug(string message)
  20:          {
  21:              logger.Debug(message);
  22:          }
  23:          public void Error(string message)
  24:          {
  25:              logger.Error(message);
  26:          }
  27:          public void Error(Exception ex)
  28:          {
  29:              logger.Error(ex.Message, ex);
  30:          }
  31:          public void Fatal(string message)
  32:          {
  33:              logger.Fatal(message);
  34:          }
  35:          public void Fatal(Exception ex)
  36:          {
  37:              logger.Fatal(ex.Message, ex);
  38:          }
  39:      }

我在构造中对log4net进行了配置,同时获取了log4net的日志记录对象。我们的配置需要写到用户接口中的web.config文件中:

   1:  <configSections>
   2:      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
   3:  </configSections>
   4:   
   5:  <log4net>
   6:      <root>
   7:        <level value="DEBUG"/>
   8:        <appender-ref ref="LogFileAppender"/>
   9:      </root>
  10:      <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
  11:        <param name="File" value="C:\log.txt"/>
  12:        <param name="AppendToFile" value="true"/>
  13:        <rollingStyle value="Size"/>
  14:        <maxSizeRollBackups value="10"/>
  15:        <maximumFileSize value="10MB"/>
  16:        <staticLogFileName value="true"/>
  17:        <layout type="log4net.Layout.PatternLayout">
  18:          <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/>
  19:        </layout>
  20:      </appender>
  21:    </log4net>

之后在Aufofac中注入一下:

builder.RegisterType<LoggerService>().As<ILoggerService>().InstancePerHttpRequest();

最后,在页面中,我们可以通过构造函数获取其实例:

   1:  public BookService(IUnitOfWork unitOfWork
   2:              , IBook bookRepository
   3:              , IBookType bookTypeRepository
   4:              , IBookPlace bookPlaceRepository
   5:              , ICacheManager cacheManager
   6:              , ILoggerService logger
   7:              )
   8:          {
   9:              this.unitOfWork = unitOfWork;
  10:              this.bookRepository = bookRepository;
  11:              this.bookTypeRepository = bookTypeRepository;
  12:              this.bookPlaceRepository = bookPlaceRepository;
  13:              this.cacheManager = cacheManager;
  14:              this.logger = logger;
  15:          }
  16:   
  17:          private readonly IUnitOfWork unitOfWork;
  18:          private readonly IBook bookRepository;
  19:          private readonly IBookType bookTypeRepository;
  20:          private readonly IBookPlace bookPlaceRepository;
  21:          private readonly ICacheManager cacheManager;
  22:          private readonly ILoggerService logger;

得到的日志结果如下:

TinyFrame升级之六:全局日志的设计及实现的更多相关文章

  1. 学习ASP.NET Core(10)-全局日志与xUnit系统测试

    上一篇我们介绍了数据塑形,HATEOAS和内容协商,并在制器方法中完成了对应功能的添加:本章我们将介绍日志和测试相关的概念,并添加对应的功能 一.全局日志 在第一章介绍项目结构时,有提到.NET Co ...

  2. SpringBoot全局日志管理(AOP)

    1.在pom.xml中引入aop的jar包 <dependency> <groupId>org.springframework.boot</groupId> < ...

  3. C#日志记录设计与实现(BenXHLog)

    C#日志记录设计与实现 日志记录: 日志记录在程序设计开发过程中,是非常重要的,可以供调试和记录数据,虽然说有开源的强大日志管理系统,比如apache的Log4Net,功能可谓强悍,但是有时候,不需要 ...

  4. 分布式全局ID生成器设计

    项目是分布式的架构,需要设计一款分布式全局ID,参照了多种方案,博主最后基于snowflake的算法设计了一款自用ID生成器.具有以下优势: 保证分布式场景下生成的ID是全局唯一的 生成的全局ID整体 ...

  5. 升级优化关于日志生成logging封装TimedRotatingFileHandler

    1.变更升级:优化日志自定义输出到文件的level,以及文件夹生成用户自由控制 # coding=utf-8 import logging import time import os import l ...

  6. ERP设计之系统基础管理(BS)-日志模块设计(转载)

    原文地址:8.ERP设计之系统基础管理(BS)-日志模块设计作者:ShareERP 日志模块基本要素包括: 用户会话.登录.注销.模块加载/卸载.数据操作(增/删/改/审/弃/关等等).数据恢复.日志 ...

  7. 个人博客开发之blog-api 项目全局日志拦截记录

    前言 大型完善项目中肯定是需要一个全局日志拦截,记录每次接口访问相关信息,包括: 访问ip,访问设备,请求参数,响应结果,响应时间,开始请求时间,访问接口描述,访问的用户,接口地址,请求类型,便于项目 ...

  8. vue 源码详解(一):原型对象和全局 `API`的设计

    vue 源码详解(一):原型对象和全局 API的设计 1. 从 new Vue() 开始 我们在实际的项目中使用 Vue 的时候 , 一般都是在 main.js 中通过 new Vue({el : ' ...

  9. TinyFrame升级之五:全局缓存的设计及实现

    在任何框架中,缓存都是不可或缺的一部分,本框架亦然.在这个框架中,我们的缓存分为两部分:内存缓存和单次请求缓存.简单说来,就是一个使用微软提供的MemoryCache做扩展,并提供全局唯一实例:另一个 ...

随机推荐

  1. Photo Shop 修改、维护

    调整画布大小 要继续放更多的图片? 更改画布大小 移动图标 若图标为独立图层,则用移动工具拖动即可 若图层为非独立图层 - 用选区工具选中图标区域 - 用移动工具拖动图标 如果要拆分同一图层下的两个图 ...

  2. (视频) 《快速创建网站》 2.3 WordPress初始化和功能简介

    本文是<快速创建网站>系列的第4篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...

  3. 一个简单的Servlet容器实现

    上篇写了一个简单的Java web服务器实现,只能处理一些静态资源的请求,本篇文章实现的Servlet容器基于前面的服务器做了个小改造,增加了Servlet请求的处理. 程序执行步骤 创建一个Serv ...

  4. org.apache.hadoop.ipc.RemoteException(java.io.IOException)

    昨晚突然之间mr跑步起来了 jps查看 进程都在的,但是在reduce任务跑了85%的时候会抛异常 异常情况如下: 2016-09-21 21:32:28,538 INFO [org.apache.h ...

  5. [MySQL Reference Manual] 7 备份和恢复

    7. 备份和恢复 本章主要会介绍: 1.备份的类型:逻辑备份,物理备份,全备和增量4种 2.创建备份的方法 3.还原方法,包括还原到时间点 4.备份计划,压缩和加密 5.表维护,恢复损坏的表 7. 备 ...

  6. [Linux 性能检测工具]IOSTAT

    IOSTAT NAME:          Iostat, 报告CPU的统计,和 I/O的统计. 语法: iostat  [ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k ...

  7. Hadoop+MongoDB的四种方案

    背景: 公司核心业务库现存在MongoDB中,分布在6台MongoDB节点.现面临如下问题: 1.最大的一张表有10多个G,MongoDB在查询方面尚能胜任,但是涉及到复杂计算时会比较吃力. 2.Mo ...

  8. C++/CLI——读书笔记《Visual C++/CLI从入门到精通》 第Ⅱ部分

    =================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载  请通过右 ...

  9. 高性能MySQL笔记 第6章 查询性能优化

    6.1 为什么查询速度会慢   查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段. ...

  10. Python搜索目录下指定的文件,并返回绝对路径(包括子目录)

    #!/usr/bin/python #coding=UTF-8 #FileName:search.py #文件搜索 import os; import sys; returnList = []; de ...