论坛首页 Java企业应用论坛

database logging or file logging

浏览 2599 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-01-30  

大家看题目应该清楚下面想讨论的问题了吧。平常的日志信息,到底是记录到数据库中,还是记录到文件中?在发表这篇文章之前,我也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分析同样是困难的。而且数据库结构远没有文件结构方便变化,因为你要增减字段。而文件只是结构不同而已,不用修改任何结构定义。

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

 

   发表时间:2012-01-30  
我抛个砖头,可以考虑文件和数据库结合。
先是记录文件日志,并且是写到本机磁盘,然后通过ftp等方式定时搜集到数据库服务器上,通过load data等操作,加载到报表数据库中,报表数据库可以使用mysql infobright等,可以存储、统计数亿记录。
另外控制日志文件的大小,需要定时定量,比如15分钟和20M,这两个条件只要达到任何一个就必须切换文件。
0 请登录后投票
   发表时间:2012-01-30  
补充一下,日志要区分种类。
一般分为用户日志和调试日志。
用户日志包括用户操作的行为,这个需要放到数据库统计。
调试日志为程序自己的一些行为,比如数据库连接成功、失败,这些一般不用统计,不需要进入数据库。
0 请登录后投票
   发表时间:2012-01-30  
方世玉 写道
我抛个砖头,可以考虑文件和数据库结合。
先是记录文件日志,并且是写到本机磁盘,然后通过ftp等方式定时搜集到数据库服务器上,通过load data等操作,加载到报表数据库中,报表数据库可以使用mysql infobright等,可以存储、统计数亿记录。
另外控制日志文件的大小,需要定时定量,比如15分钟和20M,这两个条件只要达到任何一个就必须切换文件。



这个也是我目前考虑的最好的实现方式。同时综合你说的,可以区别调试日志和用户行为日志,我觉得也是一个方向。

 

0 请登录后投票
   发表时间:2012-01-30  
方世玉 写道
补充一下,日志要区分种类。
一般分为用户日志和调试日志。
用户日志包括用户操作的行为,这个需要放到数据库统计。
调试日志为程序自己的一些行为,比如数据库连接成功、失败,这些一般不用统计,不需要进入数据库。

 

我觉得是这样,开始的时候都存储到日志文件中,而后通过规则过滤数据,用户行为之类的日志进入数据库;其他的仍然保留在源文件中。

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics