幸福框架:用户想看到的操作日志也要使用AOP吗?
背景
日志无论是对于开发人员、运维人员和最终用户都是一笔财富,是不是所有类型的日志都要AOP呢?本着交流的目的,这里先说一些看法,希望大家多批评。
常见的日志类型
异常日志
概念:记录异常的日志。
考虑:日志框架需要对不同的异常采用不同的日志方式,比如:那些为了向UI层返回消息的异常是不用记录到日志的,对于未期望异常也需要有不同的日志输入方式。
方式:AOP,适合在边界类使用(靠近系统边界的地方)。
事务:不需要参与业务事务。
服务对象:开发人员、运维人员。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc; using Common.Logging;
using Happy.Web.Mvc.Newtonsoft; namespace Happy.Web.Mvc.ExceptionHanding
{
/// <summary>
/// 处理应用程序未捕获的异常。
/// </summary>
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class WriteExceptionResultAttribute : FilterAttribute, IExceptionFilter
{
/// <inheritdoc />
public void OnException(ExceptionContext filterContext)
{
var exception = filterContext.Exception; this.LogException(exception); filterContext.Result = ExceptionInformationProviderRegistry.CreateErrorResult(exception); filterContext.ExceptionHandled = true;
} private void LogException(Exception exception)
{
if (FriendlyExceptionRegistry.Contains(exception.GetType()))
{
return;
} LogManager.GetCurrentClassLogger().Error(exception);
}
}
}
操作日志
概念:记录用户操作的日志。
考虑:这类日志的格式很难统一,每个操作都需要自己的消息格式和参数,因为最终用户要看,还需要提供友好的界面。
方式:帮助方法,适合在应用层使用。
事务:要参与业务事务。
服务对象:运维人员、最终用户。
示例:省略。
性能监控日志、程序状态跟踪等
概念:记录开发人员感兴趣的任何内容。
考虑:监控的级别可能是整个业务事务或某一层的调用,甚至是某个方法。
方式:AOP或帮助方法。
事务:不要参与业务事务。
服务对象:运维人员、开发人员。
示例:省略。
备注
系统设计的时候最好就确定日志的需求。
幸福框架:用户想看到的操作日志也要使用AOP吗?的更多相关文章
- Linux下记录所有用户的登录和操作日志
Linux下记录所有用户的登录和操作日志 一般我们可以用history命令来查看用户的操作记录,但是这个命令不能记录是哪个用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的 ...
- 在Linux下记录所有用户的登录和操作日志
一般我们可以用history命令来查看用户的操作记录,但是这个命令不能记录是哪个用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的数据丢失,就很难查到是谁操作的. 在这里我们通 ...
- ubuntu下记录所有用户的登录和操作日志
一般我们可以用history命令来查看当前用户的操作记录,但是这个命令不能记录是所有用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的数据丢失,就很难查到是谁操作导致的. 在这 ...
- 基于SqlSugar的开发框架循序渐进介绍(8)-- 在基类函数封装实现用户操作日志记录
在我们对数据进行重要修改调整的时候,往往需要跟踪记录好用户操作日志.一般来说,如对重要表记录的插入.修改.删除都需要记录下来,由于用户操作日志会带来一定的额外消耗,因此我们通过配置的方式来决定记录那些 ...
- 【开源】OSharp3.0框架解说系列(6.2):操作日志与数据日志
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- 基于NopCommerce的开发框架——缓存、网站设置、系统日志、用户操作日志
最近忙于学车,抽时间将Nop的一些公用模块添加进来,反应的一些小问题也做了修复.另外有园友指出Nop内存消耗大,作为一个开源电商项目,性能方面不是该团队首要考虑的,开发容易,稳定,代码结构清晰简洁也是 ...
- 微软企业库5.0 学习之路——第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录
在前面的Part3中, 我介绍Policy Injection模块中内置的Call Handler的使用方法,今天则继续介绍Call Handler——Custom Call Handler,通过建立 ...
- 我使用Spring AOP实现了用户操作日志功能
我使用Spring AOP实现了用户操作日志功能 今天答辩完了,复盘了一下系统,发现还是有一些东西值得拿出来和大家分享一下. 需求分析 系统需要对用户的操作进行记录,方便未来溯源 首先想到的就是在每个 ...
- linux查看ssh用户登录日志与操作日志
linux查看ssh用户登录日志与操作日志 2013-11-01转载 ssh用户登录日志 linux下登录日志在下面的目录里: 代码如下 复制代码 cd /var/log 查看ssh用户的登录日 ...
随机推荐
- python 随机字符串
pip3 install pillow 读取硬盘中的文件,在页面显示 f = open('static/imgs/yj.png','rb') data = f.read() f.close() ret ...
- 非常粗糙的react网页ppt
import React, {Component} from 'react'; import './slide.css'; class Page extends Component { constru ...
- jquery文档
http://jquery.cuishifeng.cn/selected_1.html
- IEEEXtreme 10.0 - Always Be In Control
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Always Be In Control 题目来源 第10届IEEE极限编程大赛 https://www.h ...
- Hadoop(一)Hadoop的简介与源码编译
一 Hadoop简介 1.1Hadoop产生的背景 1. HADOOP最早起源于Nutch.Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取.索引.查询等功能,但随着抓取网页数量的增加, ...
- 【58沈剑架构系列】主从DB与cache一致性
本文主要讨论这么几个问题: (1)数据库主从延时为何会导致缓存数据不一致 (2)优化思路与方案 一.需求缘起 上一篇<缓存架构设计细节二三事>中有一个小优化点,在只有主库时,通过“串行化” ...
- 【ASP.NET】编写自己的Web服务器
自己写一个简单的Web服务器,对加深理解Http协议有很好的帮助,下面就看一下一个基于TcpListener的Web服务器: class Program { static void Main(stri ...
- 借助jxl将Excel中的数据注入到Bean中
前言 使用了Hibernate的项目中需要导入多张表的数据,但是我又不想写多次取出Excle数据放到Bean里的代码,于是写了个ExcleUtils来帮助我做这件事. 基本思路 技术上,首先肯定是要借 ...
- Django Restframework 实践(二)
按照自己的方法来写接口 ''' @api_view([ 'POST','GET',]) 允许请求的是get或post方法,这里去掉get那么就不能用get方法请求 @permission_classe ...
- 给出一列数a1,a2,a3....an,求它们的逆序对数,即有多少个有序对(i,j) 使得iaj,n高达10的6次方
//归并排序 //#include<stdio.h> //#include<string.h> //#include<algorithm> //#include&l ...