LOG的输出是利用I/0写在硬盘上速度快还是插入数据库快.
[b]问题补充:[/b]
我想做日记优化,没什么思路,各位给点思路
情况描述
1.老式系统,LOG采用的是简单的流读取和写的操作
2.log采用了synchronized方式
3.每天有大概1G的LOG生成.
我的想法是采用了同步的话肯定占据了大量的系统资源,LOG采用的是流读入和读出,如在LOG很大的情况下读取和写入也会占据很大的资源.如果不使用同步,多用户使用的话可能LOG会打的很乱.
是否有必要用开源的LOG来替换掉,还是在现有的基础上进行修正.
[b]问题补充:[/b]
在现有项目不可能做大范围改动,只能修改LOG接口,把原来使用流输入输出的改为LOG4J的输入输出.
但我怕有点画蛇添足,更影响效率
io写硬盘
优势:本地文件系统,不需要通过jdbc驱动序列化进行网络传输,不存在网络问题
劣势:跟硬盘性能有关,没有优化(当然自己可以封装,例如:使用内存缓存,然后批量触发,但这样会占用少量内存资源,也比较麻烦)
存数据库
优势:如果连接已经存在,客户端无需关心服务端的处理(cilent发送过去 ->服务端缓存-〉结束),无需像写硬盘等待写入结束。自己负责事情少,检索方便!
劣势:网络问题,如果连接不存在,有连接数据库的开销
这种没有绝对的谁快的问题
如果在并发量少的情况,I/0写在硬盘上速度快应该比插入数据库快.
但如果并发量大的时候,这两种方式谁快就不好说了,
磁盘。
从速度来比
内存系统>文件系统>数据库系统
当然用开源log4j来搞,至少它是很稳定的,几乎项目都使用它
log4j ,不过现在slf4j & logback 是在log4j 的基础上做得更出色的一个日志框架,是同一个作者搞的,
这个不会的,你只是把你们的log调用委托给log4j嘛,就一个方法调用而已吧