log4net 记录文件日志到多个目录,并且用缓存。

        现状:以前系统记录日志没有用log4net,直接写入文件,发现因为写入的太频发,高峰时会出现文件占用问题,“正由另一进程使用,因此该进程无法访问此文件。”,同时另一部分日志已经开始用log4net框架,并且认为log4net应该有缓存的功能。所以研究一下。

 

        发现log4net确实有缓存buffersize,对插入数据库的,buffersize直接配置到appender中就可以了,但是发现RollingFileAppender中加入buffersize不行。后来通过看源码,发现确实RollingFileAppender确实没有buffersize。

 

        后面找到这个BufferingForwardingAppender,感觉应该是这个appender用来缓存指令到达阈值,再传给子appender执行操作。但是官网却找不到这个appender的详细说明。注意前面的“子”字,通过这个字我才想到Appender也是有继承关系的。后面又通过一些测试,搞定了缓存。

 

        ok,缓存搞定了。

 

        下一个问题是我有好多目录要写日志。但是不可能每一个目录都配一个logger。

        第一个方法,读取配置,建立logger,然后修改logger写入文件目录。但是发现“每个实例化的Logger对象被log4net作为命名实体(Named Entity)来维护”。所以修改来修改去,修改的其实还是一个logger,这样性能如何不说,无法用缓存了。我希望每个目录的写入都缓存一定次数以后再统一写入。

        第二个办法,不用配置,纯代码建立logger.一开始找到了怎么建立appender,但是建立appender没用啊,我要建立logger.自己尝试了很久,因为对log4net了解的有限,没有试出来。

 

        最后通过google找到这篇文章http://blog.csdn.net/autfish/article/details/51462922。再一次确认了google比百度强的太多。看了这篇文章就知道了,其实手工创建的logger不用持久化,直接返回返回好就可以了。之前也建立了logger,但是一直不知道怎么ActivateOptions。

 

        一开始对很多东西都模模糊糊的,不知道LogManager.GetLogger("XXX")其中XXX对应配置文件的什么。logger的继承关系也不知道。Repository和Hierarchy更是到现在也不清楚是什么关系。

 

 

2017-01-13 于 网易博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值