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,可使用自己项目中的连接方式,这个网上有人贴出源代码。我没做过类似的东西,肤浅得很啊。

    就先这些吧,挺新手的。

你可能感兴趣的:(java,数据库,日志)