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

故事

这个一个关于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自动同步同步,访问原文

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

  1. 动态调整日志级别思路&实现

    引言 上篇文章 性能调优--小小的 log 大大的坑 已将详细的介绍了高并发下,不正确的使用日志姿势,可能会导致服务性能急剧下降问题.文末也给各位留下了解决方案--日志级别动态调整. 本文将详细介绍& ...

  2. 日志级别的选择:Debug、Info、Warn、Error还是Fatal

    原文地址:日志级别的选择:Debug.Info.Warn.Error还是Fatal 作者:shanshan2627 软件中总免不了要使用诸如 Log4net, Log4j, Tracer 等东东来写日 ...

  3. (转)log4j日志级别设置成DEBUG时输出Html代码等问题:

    log4j日志级别设置成DEBUG时输出Html代码等问题: 问题: log4j日志级别设置成DEBUG时会输出很多信息,包括一些Html代码 解决方案: log4j的控制是树形,所以在log4j.p ...

  4. SpringBoot实用小技巧之动态设置SpringBoot日志级别

    有时线上问题我们用打日志的方式来观察错误或埋点参数,但由于这些日志如果都打出来会占用大量存储空间而且覆盖了一些有效信息,所以线上级别一般设置INFO,调试级别用作特殊情况下.此时如果线上想查看调试级别 ...

  5. 8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)

    log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF.FATAL.ERROR.WARN.INFO.DEBUG.TRACE. ALL. ALL 最低等 ...

  6. Log日志级别从高到低排序 ERROR、WARN、INFO、DEBUG

    Log4j建议只使用四个级别,优先级从高到低分别是 ERROR.WARN.INFO.DEBUG.通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关.比如在这里定义了INFO级别,则应 ...

  7. 【线上问题排查技巧】动态修改LOGGER日志级别

    前言 大多数情况下,我们会在打印日志时定义日志的LOGGER级别,用来控制输出的信息范围. 一方面,过多的输出会影响查看日志的效率,另一方面,过少的日志让问题定位变得困难. 但当线上出现问题时,线上容 ...

  8. Spring Boot log4j多环境日志级别的控制

    之前介绍了在<Spring boot中使用log4j>,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用D ...

  9. shell脚本实现分日志级别输出

    shell脚本如何优雅的记录日志信息,下面让我们一步一步,让shell脚本的日志也变得高端起来,实现如下功能 ①设定日志级别,实现可以输出不同级别的日志信息,方便调试 ②日志格式类似为:[日志级别] ...

随机推荐

  1. iOS 中的 Delayed Transition

    Android 的动画体系中,存在一类由 TransitionManager. beginDelayedTransition 管理的动画.这个方法,很特殊.执行此方法后,其后续的 UI 变化,不会立即 ...

  2. Dapper.Contrib——更加优雅地使用Dapper进行增删改查

    简介 Dapper是介于Entity framework与ADO的折中选择.既满足手写查询的高性能需求,又简化了数据库对象映射为内存对象的繁杂工作.Dapper.Contrib是对Dapper的进一步 ...

  3. Pandas常用函数入门

    一.Pandas Python Data Analysis Library或Pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的.Pandas纳入了大量库和一些标准的数据模型, ...

  4. ueditor插入百度音乐无法播放-403 问题

    简单记录一下,其实403是因为百度音乐设置了禁止外部连接引用,因此 几乎所有的百度音乐播放都会提示403. 注意:预览页面(dialog/music/music.html)和实际插入页面(uedito ...

  5. 开篇-我眼中的FPGA

    既然是开篇,那就来闲话叨一叨FPGA吧. 掰掰指头,结识FPGA估计有5年多.作为嵌入式工程师,每天的日常充斥着ARM.DSP.操作系统.通讯.总线等耳熟能详的词汇,徜徉其中不能自拔,而这其中,自觉最 ...

  6. Server 2008 R2远程桌面授权,解决120天过期问题

    平时在使用远程桌面过程,我们经常会遇到这样的两个问题. 问题一.远程桌面的连接数限制 Server 2008 R2默认远程桌面连接数是2个用户,如果多余两个用户进行远程桌面连接时,系统就会提示超过连接 ...

  7. intel服务器cpu命名规则

    我们以E3.E5.E7系列进行一个详细解析.首先,Intel E3.E5.E7代表了3个不同档次的至强CPU,至强"E系列"的这种命名方式有些类似桌面上的Core i3,i5,i7 ...

  8. JavaScript的兼容

    兼容总结 如果两个都是属性,用逻辑 || 做兼容 如果有一个是方法,用三元做兼容 如果多个属性或方法,封装函数做兼容 获取class属性值的兼容 function getClass (obj){ if ...

  9. alex python of day2

      模块 sys模块:sys模块是用c语言写的,所以在lib下是不会有sys.py这个文件存在 1 import sys 2 print(sys.path) #打印环境变量 3 print(sys.a ...

  10. python从2.7升级到3.5 需要主要的问题

    今天鼓足勇气把我们python从2.7升级到3.5.我用的是pycharm开发工具.升级过程遇到一些问题小结下: 1.右击项目: 找到左侧 project interpreter选项,配置项目开发环境 ...