Java调试的变迁:从System.out.println到log4j,到logback, 到slf4j(2)

    xiaoxiao2021-04-05  41

    首先介绍下logback的前世今生。

    slf4j由log4j作者Ceki开发,逐步取代apahce commons logging。

    logback由log4j作者Ceki开发,逐步取代log4j。

    slf4j等于commons-logging,是各种日志实现的通用入口,会根据classpath中存在下面哪一个Jar来决定具体的日志实现库。

    logback相比较log4j的优势

    slf4j支持参数化的logger.error(“帐号ID:{}不存在”, userId);

    告别了if(logger.isDebugEnable()) 时代。

    另外logback的整体性能比log4j也较佳,hibernate等项目已经采用了slf4j。

    slf4j和logback的使用

    如果日志的参数超过3个,需要写成

    Object[] params = {newVal, below, above}; logger.debug(“Value {} was inserted between {} and {}.”, params); 2. 因为内部已优化,作者认为slf4j的logger不需要定义为static。 3. 可设置缓存后批量写日志文件(但服务器如果重启,可能会丢失未写到磁盘的记录) 4. MDC,用Filter,将当前用户名等业务信息放入MDC中,在日志format定义中即可使用该变量。 5. JMS Appender用于告警, DB Appender用于业务日志等可以使用插件,如生成Log代码的Eclipse插件Log4E。 6. tomcat和glassfish中,设定日志路径为../logs/xxxx.log 都能将日志放入应用服务器本身的logs目录。

    最后把最近完善的一个logback.xml贴上,毕竟实际项目中的文件最能说明问题。

    Xml代码

    <?xml version="1.0" encoding="UTF-8"?> <configuration> <substitutionProperty name="log.base" value="d:\\logback\\logback" /> <jmxConfigurator /> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator name="myEval"> <expression>message.contains("dao")</expression> </evaluator> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>
    转载请注明原文地址: https://ju.6miu.com/read-666372.html

    最新回复(0)