日志记录显然是框架设计中不可或缺的元素,在本框架中,我们将使用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. WPF学习之路(三) 属性与依赖

    类型是DependencyProperty的属性是依赖属性 依赖属性不同于普通的.Net属性,类似于一个计算过程,根据依赖的值得到最终值. 为什么引入依赖属性: MSDN原文 One of the p ...

  2. [PL/SQL]oracle数据库的导出导入

    一.PL/SQL Developer工具一般对oracle的导入导出有以下4中方式: 1.Oracle导出导入方式 这种方式导出导入为.dmp的文件格式,.dmp文件是二进制的,可以跨平台,还能包含权 ...

  3. ORACLE手工删除数据库

    很多人习惯用ORACLE的DBCA工具创建.删除数据库,这里总结一下手工删除数据库实验的步骤,文中大量参考了乐沙弥的手动删除ORACLE数据库这篇博客的内容,当然还有Oracle官方相关文档.此处实验 ...

  4. HTML基础(二)——表单,图片热点,网页划区和拼接

    一.表单 <form id="" name="" method="post/get" action="负责处理的服务端&qu ...

  5. SQL中CHARINDEX()/INSTR()函数和SUBSTRING()/SUBSTR()函数

    一.SQLServer中的CHARINDEX() 和ORACLE中的INSTR()函数 1.INSTR(C1,C2[,I[,J]]) [功能]在一个字符串中搜索指定的字符,返回发现指定的字符的位置; ...

  6. 这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?

  7. android WebView网页浏览器

    组件位置:composite>WebView .xml <WebView android:id="@+id/webview_pipeweb" android:layou ...

  8. C# FTP 命令无法获取ServerU目录列表问题

    第一步:  使用C# 的Ftp功能时,发现了一个很奇怪的现象,获取目录列表的命令,在SeverU上面直接返回错误,而在windows自带的FTP上则正常,经过反复试验,终于发现,原来是ServerU默 ...

  9. 【4412嵌入式开发板学习笔记】认识uboot

    转自迅为讨论群:http://www.topeetboard.com 重要说明:这份笔记不是4412开发配套的,是我在网上看视频的时候下载上课老师的笔记后修改的.所以我试了一下笔记上的uboot命令, ...

  10. 关于电磁场中的E.B.D.H的理解

    电磁场理论中存在四个基本物理量,电场强度E,磁场强度H,电场通量密度D,磁场通量密度B. E:其中E和H最简单,电场中的电荷受到电场力的作用,单位电荷受的力称为电场强度,这种定义得到E的单位为N/C, ...