LOG4J一些工作中的学习总结

首先声明:我这里使用的是apache的log4j日志框架,并没有采用slf4j的

因为工作需要,组长要求我对整个项目里面的日志过程进行优化,所有的日志不要全部输出到文件与控制台中去,这会影响实际使用过程中对项目出现问题时维护的困难程度。于是,我便乐在其中,开始在干活过程中对LOG4J实实在在地体验。PS:以前也用过,不过是简单地默认输出文件,而这次,我有了进一步地体会,特地记录下来,作为工作经验。

原理不说,我不是那种人,谢谢。

LOG4J可以自定义多个输出目标,并且提供了多个APPENDER供我们使用,我在项目中常用的是:DailyRollingFileAppender(每日生成一个日志文件),ConsoleAppender(输出到控制台),JDBCAppender(写入数据库)。

对于日志文件的配置,LOG4J支持配置相对路径和绝对路径两种形式。

对于写入到数据库,除了声明适用jdbcappender以外,要显式声明DB的URL,DRIVER,USER,PASSWORD,更主要的,是务必确认在你的数据库里有一张日志表,你需要在配置文件里指定插入日志表的INSERT语句。

今天需要处理的日志情况是,把业务部分的info级别的日志分别写入数据库里面。这样,我们需要在配置文件中指定一些指定目录下的logger输出地,比如:log4j.logger.com.golden.service=JDBC。这里是说,在目录com.golden.service下所有的JAVA文件里,有调用日志信息的地方,全部写到名为JDBC所配置的appender里面。我这里配置的是写入数据库:
log4j.appender.JDBC=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.JDBC.Threshold=info 记录info级别调用的日志
log4j.appender.JDBC.URL=你的数据库URL
log4j.appender.JDBC.driver=com.mysql.jdbc.Driver 我用MYSQL
log4j.appender.JDBC.user=root
log4j.appender.JDBC.password=root
log4j.appender.JDBC.sql=INSERT INTO 你的日志表 (userid,msg,date) values('%XuserId','m%','d%')


简单说明:%X是LOG4J提供给我们的可以自定义接收的参数,这里,你只需要在日志输出地方加一句MDC.put("userId","admin"),这样LOG4J就能接收到admin了。MDC包装了一个MAP信息去封存我们要传的参数,它也暴露了静态方法让我们去自己添加想要传递的日志信息,这个在插入数据表的操作十分有用。

其实,LOG4J自身提供的JDBC模式写入日志表,缺点也有。特别是BS系统,有了自己的JDBC连接方式,SPRING的也好,HIBERNATE的也好。如果写入日志表,再自己创建JDBC连接,这样对数据库的负担会很重,等于一个用户在操作系统的同时,为他同时开了两个连接。网上有大虾的做法是自定义jdbcappender,可使用自己项目中的连接方式,这个网上有人贴出源代码。我没做过类似的东西,肤浅得很啊。

就先这些吧,挺新手的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值