DEBUG技巧-设定合适的日志级别



有些技能只有踩过坑的人才能够掌握,能用来避免后来的坑,很多时候是用凌晨的时间换来的,我们通常把他叫做经验。

故事

这个一个关于springmvc的坑的故事。

某天晚上本打算一个小功能分分钟搞定上线,但页面总是报404错误,肉眼实在找不到原因。
各种手段折腾,断点,重启,重新打包,拍脑袋觉得代码没写错,url路径也ok,真心没问题,无数次f5就是不出来。

很多时候遇到一个bug越着急越搞不定,我就是这种情况,花了一两个小时时间,眼看都过0点了,此时我正用最后的手段,引入spring源码直接一步步debug,看起来也没问题,那能不能更深入点,从spring启动开始。

这时我突然想到了日志,平时线上的日志级别都是error,本地一般也很少改,大多数情况都是断点debug,日志更多的是用来日后线上问题排查。所以我改了下spring的日志级别,看看他启动干了啥。

因此,修改了下log4j的配置文件,将springmvc的日志级别改为debug,如果是logback的话,配置文件也是类似。

<logger name="org.springframework.web">
<level value="DEBUG"/>
</logger>

这样的话启动后,springmvc就会打印出它所加载的路径映射,每次请求也会详细打印出请求的参数,路径等等。

然后,重启,看到控制台打印出来的路径和我实际访问的路径,问题一目了然了,原来我与显示页面只差一个字母大小写的距离。看一下时间,已然是凌晨1点,默默的在心里说一句:WTF。然后倒头就睡。


合理的日志级别

日志是我们经常用到的东西,但很多时候只有在遇到线上bug之类的情况才会想起有日志可以协助排查,但开发的时候一点点日志级别修改,就能避免某个bug调试到凌晨1点才发现与答案只差一个字母的距离。

我个人的经验,在web项目时会把三个方面的日志级别改为debug

  1. webmvc框架:springmvc 或者struts2,主要查看请求路径和参数,页面400,404了,看看请求路径和参数对不对;
  2. orm框架:如mybatis,debug级别会打印sql和参数,有sql异常通过日志就可以很快定位;
  3. 项目本身的业务日志,这个一般很少。

至于其他外部依赖的项目根据需要自行定义,root日志级别一般是error,不然很多其他日志混进来会导致很难查看。

对于struts2,日志级别是这么定义的。

<logger name="com.opensymphony.xwork2">
<level value="DEBUG"/>
</logger>

当然这是xml格式的配置文件,如果是properties,需要这么做

log4j.logger.com.opensymphony.xwork2=debug

mybatis的sql则可参考如下

log4j.logger.com.ibatis=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.PreparedStatement=debug


本文于2016-07-07 18:32:58从Chu Lung‘s blog自动同步同步,访问原文

时间: 2024-11-08 18:09:00

DEBUG技巧-设定合适的日志级别的相关文章

log4j.properties日志级别debug打印后台sql语句

通常,日志的打印级别对开发的辅助性非常重要,合适的日志级别能够快速定位开发问题. 很多时候,开发时我们需要检查后台sql语句,可通过配置log4j配置文件来完成. 当INFO级别时,与数据库交互时是不会打印sql语句的,配置如下: 为了更清晰的看到sql的输出,我们现在把日志级别改为DEBUG,如下: 这样在与数据库交互时,控制台就会将sql打印出来,便于定位问题:同时也可以很明显的看出INFO与DEBUG的日志输出区别,DEBUG输出的日志较多,且在项目启动的时候也较慢. 原文地址:https

[转载]log4j输出日志级别控制

我们知道:log4j.logger.XX cover ==> log4j.rootLogger log4j.appender.XX.Threshold决定了最低接收级别 也就是说rootLogger首先决定所有log的输出级别,而log4j.logger.XX是对XX路径下的jar包的输出级别的修改,直接覆盖rootLogger 但是对于不同的输出口,他们的接收级别是不同的. 举例1:log4j.appender.XX.Threshold门槛高于log4j.logger.XX时, log4j.l

Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法

Log4J日志配置详解 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置. 1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN <

log4j动态日志级别调整

1. 针对root logger的设置 log4j.rootLogger=INFO, CONSOLELogger.getRootLogger().setLevel(org.apache.log4j.Level.DEBUG) 2. 针对Appender的Appender设置 log4j.appender.CONSOLE.Threshold=DEBUG((org.apache.log4j.ConsoleAppender)Logger.getRootLogger().getAppender("CONS

Log4cpp配置文件及动态调整日志级别的方法

一.log4cpp概述 Log4cpp是一个开源的C++类库,它提供了C++程序中使用日志和跟踪调试的功能,它的优点如下: 提供应用程序运行上下文,方便跟踪调试: 可扩展的.多种方式记录日志,包括命令行.文件.回卷文件.内存.syslog服务器.Win事件日志等: 可以动态控制日志记录级别,在效率和功能中进行调整: 所有配置可以通过配置文件进行动态调整: 多语言支持,包括Java(log4j),C++(log4cpp.log4cplus),C(log4c),python(log4p)等: 二.原

日志入门一:日志级别

序言 我们经常做项目,都会遇到日志的记录,日志记录都有统一的标准,下面我们就简述常见的几种日志级别:::::Debug.  Info .Warn. Error .Fatal  日志级别 Debug<Info<Warn<Error<Fatal    日志的级别越来越高 一.Debug (1)最低的级别,一般来说,系统实际运行中,一般都是不输出. (2)该级别既然是最低,可以随意的使用,任何有利在调试详细的了解系统运行状态的东西,如果:::变量,查询内容等等 (3)在每一个 Debug

java Eclipse debug技巧

摘要:调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试技巧,保证让你受益匪浅! 调试可以帮助识别和解决应用程序缺陷,在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序.但这里介绍的调试方法基本都是通用的,也适用于NetBeans IDE,我们会把重点放在运行时上面. 在开始之前,推荐大家去看看Eclipse shortcuts

动态设置日志级别

设置包的日志等级 Level level = Level.toLevel(Level.DEBUG);Logger logger = LogManager.getLogger(“package”);logger.setLevel(level); 设置全局日志等级 Level level = Level.toLevel(Level.DEBUG); 动态设置日志级别

Android 日志级别总结

Android Console窗口只会打印 软件的 安装信息及部分异常. Android 日志信息 可通过Logcat View 查看. 其中使用Logcat 可查看到的日志级别分别为:ERROR,WARN,INFO,DEBUG,VERBOSE 其优先级分别为:ERROR>WARN>INFO>DEBUG>VERBOSE 通常使用Logcat 的方式可自定义Filter 中的LogTag 来进行Log日志的筛选. Java 中常用的System.out  的默认级别为Info,Sys