一、LOG4J基础:
1.日志定义
       简单的Log4j使用只需要导入下面的包就可以了
  // import log4j packages
  import org.apache.log4j.Logger;
  
  然后你需要在类的开头写上下面一句
  private final static Logger log =Logger.getLogger(ClassName.class); //注意这里写的是当前类的类名。
 
2.日志级别
  这样你就有了一个日志对象叫做 log,这个log有以下集中用法
  log.info();//一般信息
  log.debug();//调试信息
  log.error();//错误信息
  log.warn();//警告信息
  log.fatal();//致命错误信息
  上面列出的就是所谓log4j的输出级别,log4j建议只使用4个级别,它们从上到下分别为ERROR、WARN、INFO、DEBUG,
       假设你定义的级别是info,那么error和warn的日志可以显示而比他低的debug信息就不显示了。
 
3. 日志使用
       Log 日志主要用于记录程序运行的情况,以便于程序在部署之后的排错调试等等!这一点相信大家都很清楚。但相信很多人都会遇到这个问题:即如何选择日志级别,如何记录日志才能更好的指导调试及排查问题。以下是一些自己在项目中的心得体会
 
场景1:特定异常不需要抛出时需要记录日志,该日志级别可以选择log.error()错误日志或者log.warn()警告日志以便引起注意
例如:
    try{
        // BUSINESS CODE
        // ...
        // ...
    }catch (Exception e) {
       log.warn("STARIBOSS.internal.error!Case:", e);
    }
 
原因:
1)很多BUG根本原因都与配置文件配置有关,只用try...catch吃掉异常,很难定位问题原因,记录日志后可以从日志中发现该问题,以便确认影响范围。例如读取配置文件,如果未配置配置文件时,在try..catch中使用日志记录异常信息,这样这个异常会被现场人员关注,更早的发现配置问题
 
 
场景2:Exception异常,一般使用log.error("error message", e)方式输出Exception异常信息。
例如:
    try{
        // BUSINESS CODE
        // ...
        // ...
    }catch (Exception e) {
       log.error("STARIBOSS.internal.error!case:", e);
        // DEAL EXCEPTION CODE
        // ...
    }
 
原因:
1)这种方式会输出堆栈信息,可以很方便的定位问题,减少排查问题的难度
2)Exception 异常一般为意料之外的未知异常,需要引起现场人员的主意,现场一般会通过ERROR搜索日志,查找找到级别为ERROR级别的错误并关注
 
场景3:已知异常,记录日志时,尽量打印对排查问题有帮助的信息
举例:
    if (newMobilePin.length() != 6 || !isNum.matches()) {
        logger.info("agent moblie new pin not correct");
        throw new MsrRuntimeException("new.pin.not.correct");
    }
该异常是已知异常所以使用了info级别日志记录异常信息,因为异常原因MsrRuntimeException中已经说明,因此日志中记录的信息内容对排查问题帮助不大
修改如下:
    if (newMobilePin.length() != 6 || !isNum.matches()) {
        logger.info("newMobilePin="+newMobilePin);
        throw new MsrRuntimeException("new.pin.not.correct");
    }
原因:
1)日志的作用是“Log 日志主要用于记录程序运行的情况,以便于程序在部署之后的排错调试”。因此日志中应该记录方便排查问题的信息。
例子中异常内容为新pin码不符合要求,因此将新pin码打印出来,这样调试或排查时候就可以很快知道这个错误pin码为何不符合要求
 
 
 
 
 
 
 

【JAVA】LOG4J使用心得的更多相关文章

  1. Java log4j详细教程

    Java log4j详细教程 http://www.jb51.net/article/74475.htm

  2. java log4j基本配置及日志级别配置详解

    java log4j日志级别配置详解 1.1 前言 说出来真是丢脸,最近被公司派到客户公司面试外包开发岗位,本来准备了什么redis.rabbitMQ.SSM框架的相关面试题以及自己做过的一些项目回顾 ...

  3. Java开发学习心得(二):Mybatis和Url路由

    目录 Java开发学习心得(二):Mybatis和Url路由 1.3 Mybatis 2 URL路由 2.1 @RequestMapping 2.2 @PathVariable 2.3 不同的请求类型 ...

  4. Java开发学习心得(一):SSM环境搭建

    目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...

  5. java集合类学习心得

    java集合类学习心得 看了java从入门到精通的第十章,做个总结,图片均取自网络. 常用集合的继承关系 Linked 改快读慢 Array 读快改慢 Hash 两都之间 Collection是集合接 ...

  6. ELK 记录 java log4j 类型日志

    ELK 记载  java log4j 时,一个报错会生成很多行,阅读起来很不方便. 类似这样 解决这个问题的方法 1.使用多行合并 合并多行数据(Multiline) 有些时候,应用程序调试日志会包含 ...

  7. 从零开始学 Java - log4j 项目中的详细配置

    你还会用笔来写字么 我是不怎么会了,有时候老是拿起笔之后不知道这个字怎么写,这时候就会拿起手机去打出来:有时候还会写出来这个字之后越看越不像,这时候就开始怀疑自己的能力了:有时候写出来了一大堆字之后, ...

  8. Java log4j的环境搭建

    一.Log4j是什么? Log4j是Apache的一个开源代码项目,通过使用Log4j,我们可以控制日志信息输出的目的地.最常见的就是输出到控制台或者日志文件.同时,它强大的一点是可以在C.C++等其 ...

  9. java Log4j日志配置详解大全

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

随机推荐

  1. Myeclipse 2016 & 2014 下载

    myeclipse-2016-ci-6-offline-installer-windowshttps://downloads.genuitec.com/downloads/myeclipse/inst ...

  2. settimeout,cleartimeout的使用分析

    设置时间的定时轮回执行,大家想到的js也就是settimeout这个方法,这个方法确实能够实现定时反复执行的功能,clearttimeout这是清理或者是暂停轮回执行的情况.可是发现clearttim ...

  3. python多线程之Condition(条件变量)

    #!/usr/bin/env python # -*- coding: utf-8 -*- from threading import Thread, Condition import time it ...

  4. 算法系列:XXX

    转载自http://www.cnblogs.com/skynet/p/3372855.html 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择 ...

  5. hdu 4046 2011北京赛区网络赛G 线段树 ***

    还带这么做的,卧槽,15分钟就被A了的题,居然没搞出来 若某位是1,则前两个为wb,这位就是w #include<cstdio> #include<cstring> #defi ...

  6. linux下SVN忽略文件/文件夹的方法

    linux下SVN忽略文件/文件夹的方法 假设想忽略文件temp 1. cd到temp所在的目录下: 2. svn propedit svn:ignore . 注意:请别漏掉最后的点(.表示当前目录) ...

  7. Arduino101学习笔记(九)—— 中断函数

    1.设置中断函数 //***************************************************************************************** ...

  8. cf #365b 巧妙的统计

     Mishka and trip time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  9. Liferay 6.2 改造系列之二十一:修改WebSphare下JSONWS服务不生效的BUG

    问题原因是WebSphare下,servletContext.getContextPath()获取到的值为“/”而非空字符串. 在/portal-master/portal-impl/src/com/ ...

  10. ps命令使用 进程查看

    ps命令是Process Status的缩写 用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命 ...