一、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. 攻城狮在路上(肆)How tomcat works(二) 一个简单的servlet容器

    该节在上一节的基础上增加了所谓对静态资源和动态资源访问的不同控制流程.示例里面采用的是对路径“/servlet/”进行了特殊处理. 一. 主要还是从HttpServer1中的main方法开始,先解析出 ...

  2. c语言运算符号的优先级

    c语言运算符号的优先级 本文来自百度搜索只为查看方便 优先级等级口诀: 圆方括号.箭头一句号, 自增自减非反负.针强地址长度, 乘除,加减,再移位, 小等大等.等等不等, 八位与,七位异,六位或,五与 ...

  3. 注解:【有连接表的】Hibernate单向N->1关联

    Person与Address关联:单向N->1,[有连接表的] Person.java package org.crazyit.app.domain; import javax.persiste ...

  4. Android系统介绍与框架(转)

    一.Andriod是什么? Android系统是Google开发的一款开源移动OS,Android中文名被国内用户俗称“安卓”.Android操作系统基于Linux内核设计,使用了Google公司自己 ...

  5. loj 1426(dfs + bfs)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1426 思路:首先我们预处理出每一个"*"在某一方向上最终能到达的位 ...

  6. java中的负数的问题

    在计算机中是使用二制数中的最高位表示来正负. 二进制的储存中都是用的补码,正数的原码.反码和补码相同,负数的原码是最高位为1,反码最高位不变,其余各位取反,补码为其反码+1(重要!!) 首先得知道最高 ...

  7. 遍历windows驱动

    驱动都存在 \\Driver 或者 \\FileSystem 目录对象里 我们只需要遍历这两个目录就可以遍历windows所有驱动 知识点 \\Driver  \\FileSystem (dt _OB ...

  8. ArrayList集合&特殊集合

    一.ArrayList集合 集合内可以放不同类型的元素 另:object类型为所有数据类型的基类 添加元素:.add(); 清空集合:al.clear(); 克隆集合:.clone(); 判断是否包含 ...

  9. 如何将Android Studio项目提交(更新)到github

    转载:http://blog.csdn.net/jinrall/article/details/45787477 前言 在写这篇文章之前首先我假设你已经安装了Android Studio 并已经会用A ...

  10. WPF datagrid 动态增加列

    DataGrid动态增加列 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.m ...