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

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

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

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

下面是其实现部分:

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

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

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

之后在Aufofac中注入一下:

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

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

  1. 1: public BookService(IUnitOfWork unitOfWork
  1. 2: , IBook bookRepository
  1. 3: , IBookType bookTypeRepository
  1. 4: , IBookPlace bookPlaceRepository
  1. 5: , ICacheManager cacheManager
  1. 6: , ILoggerService logger
  1. 7: )
  1. 8: {
  1. 9: this.unitOfWork = unitOfWork;
  1. 10: this.bookRepository = bookRepository;
  1. 11: this.bookTypeRepository = bookTypeRepository;
  1. 12: this.bookPlaceRepository = bookPlaceRepository;
  1. 13: this.cacheManager = cacheManager;
  1. 14: this.logger = logger;
  1. 15: }
  1. 16:  
  1. 17: private readonly IUnitOfWork unitOfWork;
  1. 18: private readonly IBook bookRepository;
  1. 19: private readonly IBookType bookTypeRepository;
  1. 20: private readonly IBookPlace bookPlaceRepository;
  1. 21: private readonly ICacheManager cacheManager;
  1. 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. linux 学习随笔-磁盘管理

    1:df 用于查看已挂载磁盘的容量信息 -i 查看inodes使用情况 -h 以合适的单位显示 -k -m 分别以k M单位显示 2:du 查看某个文件或者目录占用的空间 du [-abckmsh] ...

  2. Linux账号密码过期会导致crontab作业不能执行

    今天一同事报告Linux服务器上的crontab作业没有运行,检查/var/log/cron日志后发现下面错误信息 Jan 19 16:30:01 xxxx crond[31399]: Authent ...

  3. Access界面基础操作

    1. 显示表 2. 条件“或” SELECT 研究生.姓名, 研究生.性别, 研究生.入学分数 FROM 研究生 WHERE (研究生.性别="女" AND 研究生.入学分数< ...

  4. Oracle12c安装出错

    Database Configuration Assistant安装失败 向广大园友求助

  5. mongoDB怎样拷贝一个collection从一个数据库到另一个在同一个主机上

    new_database是目的数据库 db.<collection_name>.find().forEach(function(d){ db.getSiblingDB('<new_d ...

  6. 其他(一)Visual Studio 自动排版快捷键

    自动对齐快捷键为:ctrl+k+d 按快捷键前,请先将需要对齐的代码选中.不选中是不行的.

  7. Nagios 自定义插件与安装使用之监控dead datanodes

    现在我使用nagios来监控hadoop的核心进程,rm,nm,dn,nn,zkfc,jn,zk等,但是有时候进程虽然还在,但是日志不刷新,web ui上可以看到有些datanodes节点已经变为de ...

  8. 使用中国版 Office 365 -- Team Site分享

    Team Site(工作组网站)主要用于团队内部的协同工作,团队(组织机构)内部每个需要使用Team Site的用户都需要一个Office 365的license.但是如果我们需要将Team Site ...

  9. 从WinCE到Linux

    到新的公司已经快两个月了,新的工作主要方向是Linux驱动移植和Android系统定制.由于项目还在立项的阶段,并没有分配具体的工作任务,所以找来一个Linux的开发板先玩一玩.它采用的处理器NUC9 ...

  10. 【原创Android游戏】--猜数字游戏Version 0.1

    想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时 ...