database logging or file logging

大家看题目应该清楚下面想讨论的问题了吧。平常的日志信息,到底是记录到数据库中,还是记录到文件中?在发表这篇文章之前,我也google 了一下,下面几个链接供大家讨论时的参考。

  1. http://stackoverflow.com/questions/1160720/log-to-database-instead-of-log-files
  2. http://hungred.com/useful-information/best-way-log-details-database-or-file-log/
其实问题主要有以下几个:
  1. 实现的难易程度(从java平台来讲);
  2. 性能(千古不变的话题);
  3. 可扩展性;
  4. 是否可分析(无法分析的日志系统没有任何意义);
下面我简单说一下我的观点,剩下的请大家自由发挥:
首先,文件日志实现最简单。文件日志不需要额外的工作,不需要其他的外部资源(比如数据库连接)。利用现有的log4j等框架就可以。但是数据库日志就没有什么现成的解决方案,需要从头设计。肯定要考虑的因素包括日志数据表的可扩展性,因为日志的信息量是巨大的,不采用分库、分表等数据库优化技术,将使得日志的记录和查询都相当缓慢。这反过来又增加了数据库日志的实现难度。尤其是对于没有采用分库、分表的项目来说,为了日志模块,需要增加相应的接口;
其次,文件日志性能比较高(在合理配置log4j的情况下,比如每小时滚动一次日志文件)。和数据库日志相比,至少没有网络传输的时间。但是要控制日志文件的大小,日志文件太大以后,性能反而不如数据库日志(有兴趣的朋友可以试一下);
最后,就是是否可分析了。很多同学说日志文件不好分析,一行一行看很麻烦,而且文件很大,打开文件都很困难。其实可能是不太了解一些文件分析工具或者命令。比如在linux下采用grep等。但是由于文件日志会导致大量的小文件,比如按小时分,一天就有24个日志文件。因此文件的合并分析可能是个问题;数据库日志在大家的看法里,应该是比较好分析的,因为大家都熟悉SQL。但是相应的,如果采用了分库分表的技术,SQL分析同样是困难的。而且数据库结构远没有文件结构方便变化,因为你要增减字段。而文件只是结构不同而已,不用修改任何结构定义。

好了,我说了这么多了,就等大家来讨论了。。。

猜你喜欢

转载自power1128.iteye.com/blog/1381912
今日推荐