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做扩展,并提供全局唯一实例:另一个 ...
随机推荐
- ionic教程之Win10环境下ionic+angular实现滑动菜单及列表
写博客,不容易,你们的评论和转载,就是我的动力,但请注明出处,隔壁老王的开发园:http://www.cnblogs.com/titibili/p/5124940.html 2016年1月11日 21 ...
- jquery实现当前页面按钮点击全屏,点击退出全屏
var fullscreen=function(){ elem=document.body; if(elem.webkitRequestFullScreen){ elem.webkitRequestF ...
- igraph安装(R/Python)
python-igraph:啥都不说了,用Ubuntu吧,虽然按照官方的流程还是会出错,但是排错会比较少,一般找不了多久就能找到解决方案 R-igraph:一般需要升级R版本,用3.3吧.升级R的方法 ...
- VS 2013中的新特性browser link
Browser Link是连接VS和浏览器之间的通道.有了这个特性,web程序就能够和VS交互传递数据.这个特性在VS2013中是默认开启的.当开启了Browser Link, web程序运行的时候, ...
- JS代码判断字符串中有多少汉字
$("form").submit(function () { var content = editor.getContentTxt(); var sum = 0; re = /[\ ...
- jasperreports+iReport制作报表笔记
一. 准备工作 1. 下载相关工具:点击此下载相关工具,jasperreports-5.6.0-project.zip中有提供所需的jar包. 二. 安装ant 1. 解压apache-ant-1.9 ...
- shell脚本变量
既然是变量,自然分变量名和变量值,在使用的时候一定要注意哪些地方需要用变量名,哪些地方需要用变量的值. 自定义变量 shell变量不需要声明,随用随定义,给变量赋值的时候要注意 shell是空格敏感的 ...
- Linux IPC System V 信号量
模型 #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> ftok() //获取key ...
- top:failed tty get 错误
运行命令,ps -ef | grep test | grep -v test | awk '{ print $2 }' | xargs top -H -p 想看test的实时状态,结果报了错,查了一下 ...
- DuiLib学习笔记(二) 扩展CScrollbar属性
DuiLib学习笔记(二) 扩展CScrollbar属性 Duilib的滚动条滑块默认最小值为滚动条的高度(HScrollbar)或者宽度(VScrollbar).并且这个值默认为16.当采用系统样式 ...