TinyFrame升级之六:全局日志的设计及实现
日志记录显然是框架设计中不可或缺的元素,在本框架中,我们将使用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升级之六:全局日志的设计及实现的更多相关文章
- 学习ASP.NET Core(10)-全局日志与xUnit系统测试
上一篇我们介绍了数据塑形,HATEOAS和内容协商,并在制器方法中完成了对应功能的添加:本章我们将介绍日志和测试相关的概念,并添加对应的功能 一.全局日志 在第一章介绍项目结构时,有提到.NET Co ...
- SpringBoot全局日志管理(AOP)
1.在pom.xml中引入aop的jar包 <dependency> <groupId>org.springframework.boot</groupId> < ...
- C#日志记录设计与实现(BenXHLog)
C#日志记录设计与实现 日志记录: 日志记录在程序设计开发过程中,是非常重要的,可以供调试和记录数据,虽然说有开源的强大日志管理系统,比如apache的Log4Net,功能可谓强悍,但是有时候,不需要 ...
- 分布式全局ID生成器设计
项目是分布式的架构,需要设计一款分布式全局ID,参照了多种方案,博主最后基于snowflake的算法设计了一款自用ID生成器.具有以下优势: 保证分布式场景下生成的ID是全局唯一的 生成的全局ID整体 ...
- 升级优化关于日志生成logging封装TimedRotatingFileHandler
1.变更升级:优化日志自定义输出到文件的level,以及文件夹生成用户自由控制 # coding=utf-8 import logging import time import os import l ...
- ERP设计之系统基础管理(BS)-日志模块设计(转载)
原文地址:8.ERP设计之系统基础管理(BS)-日志模块设计作者:ShareERP 日志模块基本要素包括: 用户会话.登录.注销.模块加载/卸载.数据操作(增/删/改/审/弃/关等等).数据恢复.日志 ...
- 个人博客开发之blog-api 项目全局日志拦截记录
前言 大型完善项目中肯定是需要一个全局日志拦截,记录每次接口访问相关信息,包括: 访问ip,访问设备,请求参数,响应结果,响应时间,开始请求时间,访问接口描述,访问的用户,接口地址,请求类型,便于项目 ...
- vue 源码详解(一):原型对象和全局 `API`的设计
vue 源码详解(一):原型对象和全局 API的设计 1. 从 new Vue() 开始 我们在实际的项目中使用 Vue 的时候 , 一般都是在 main.js 中通过 new Vue({el : ' ...
- TinyFrame升级之五:全局缓存的设计及实现
在任何框架中,缓存都是不可或缺的一部分,本框架亦然.在这个框架中,我们的缓存分为两部分:内存缓存和单次请求缓存.简单说来,就是一个使用微软提供的MemoryCache做扩展,并提供全局唯一实例:另一个 ...
随机推荐
- 10、技术经理要阅读的书籍 - IT软件人员书籍系列文章
技术经理是项目组中的重要角色.他需要负责软件项目中的重要部分,如果项目组没有架构师的话,技术经理还需要担负起架构师的职责.同时,技术经理要对项目中的所有重要的技术问题进行处理. 但是,在项目组内部,软 ...
- 【转发】Html5 File Upload with Progress
Html5 File Upload with Progress Posted by Shiv Kumar on 25th September, 2010Senior Sof ...
- FreeMarker 日期转换
${parameters.fieldDate?date} //标准日期转日期字符串 ${parameters.fie ...
- C#语言基础——数组
数组 一.一位数组 数组初始化,创建数组,数组长度为5 int[] array = new int[5]; array[0] = 1; array[1] = 2; array[2] = 3; arra ...
- javascript-单例模式
单例模式笔记 也称为单体模式,只允许实例化一次的对象类 用法: 1.命名空间:用一个对象来规划一个命名空间,井井有条的管理对象上的属性和方法 2.静态变量管理:让创建的函数 ...
- centos 安装maven
1.环境: 操作系统:centos7 maven:apache-maven-3.3.9-bin.tar.gz 2.安装JDK(1.7) 3.安装maven mkdir -p /opt/usr/loca ...
- cocos2d-x 3.10 屏幕适配问题
cocos2d-x 的屏幕适配问题困扰了我很久,差不多有一个星期吧.通过亲身实践才解决了问题,分享一下解决办法,供大家借鉴学习. 其实解决办法很简单,把下面代码注释掉就好了 // if (frameS ...
- React-Native测试报告
React-native 使用js编写android和ios程序,前端时间开始支持android,本人根据官方的教程,先安装开发环境,然后运行hello world,最后看了下官方提供的实例程序UI ...
- SVN Unable to connect to a repository at UR
背景: 1. SVN服务器:VisualSVN-Server-2.5.5: 2. SVN客户端:TortoiseSVN-1.7.6.22632-x64-svn-1.7. ...
- Redhat Linux 修改主机名(HOSTNAME)
hostname #查看当前主机的主机名hostname NEWHOSTNAME #临时修改当前主机名 修改主机名vi /etc/sysconfig/network #通过配置文件修改主机名NETWO ...