概述

       开发一个MVC的Web程序,然后,将其发布,用户开始使用我们的程序,使用的过程中出现了相应的错误,直接跳转到了错误页,用户问我们怎么回事,我们当时一般是不知道怎么回事,要是知道的话,就改了,那么,我们应该怎么着的快速的找到问题,并且,修改它呢?

       有人说我们可以进行相应的调试,连接人家的数据库,获得上线相应版本的程序,然后才调试,这个一般行不通,上线程序的数据都是实际的数据(安全性很高),并且,对于权限的控制是非常高,你要是仅仅一个调试,就可以获得人家的所有数据,换做谁,也不会让你这么干的。那么,我们应该怎么做呢?此时,错误日志的作用就出来了,它可以帮助我们快速的确定问题,这个也就是本篇博客的主题:错误日志处理。


错误日志处理方案

       方案一:对于每个可能出错的地方,我们都写一套方案,让其保存在相应的错误文件中。

       对于每一个可能出错的地方,我们都需要自己写一段重复的代码,这个显而易见的不好,最起码我们应该将其抽象成一个类

       方案二:自定义一个错误处理类,继承HandleErrorAttribute,并在Global中进行相应的注册,实现程序出现错误时,并且,抛到这个层上,就会自动执行里面的方法,达到一个全局错误处理的效果,此时,我们将写入错误文件的代码写在这里,就可以实现全局共享的作用了。

       对于上述那种方式,不是很好,因为,只能通过一种方式进行错误的记录,假如,人家说,将错误信息写到数据库中,那么就非常的麻烦。

       方案三:使用观察者+spring.net实现多种错误日志记录的方式。

       观察者模式可以使我们的观察者的类型可以有很多,spring.net可以使这些类型的创建,通过配置文件搞定的,达到一种通过修改修改一些配置就ok的效果。

       上面的那种方式,看似没有问题了,其实不然,如果,对于用户量非常大的程序来说,程序中的一个小错误也会被放大无限倍,就是说,同一时间内,使用你这个程序,并且,在这个点出现错误的人数非常多,这些都需要往错误日志或数据库中写,那么,这个写的过程就会变的非常的慢。

       方案四:将错误信息记录先记录在队列中,然后,另从线程池中开启一个线程,不断的从队列中取数据,并且执行写操作。

       这个方案大大减轻了用户等待错误日志写的时间,但是,还是存在一个问题,这个问题也可以说是方案三种遗留下来的,那就是,错误日志记录的方式太多了,我们都写了?如果都要写的话,这个确实是一个不小的工程。

       方案五:使用log4net进行相应的错误信息的记录,程序中引入log4net程序集,然后,我们通过设置配置文件,就可以实现多种错误日志的记录方式,并且,这些代码的维护,不需要我们写,一个字爽。


总结

       错误日志不是用户业务的需求,但是,确实程序不可或缺的一部分。