一、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. sublime text 2 安装emmet插件

    一.添加插件之前先 下载Package Control 按 Ctrl+`(就是~这个键) 复制下面的代码 确认 重新启动sublime text2 import urllib2,os;pf='Pack ...

  2. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序(转)

    本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的javah命令,第二种为整合javah到eclipse里面.推荐第二种方式,方便快捷,随时修改随时生成 0:前提和条件: 1:u ...

  3. 介绍linux下vi命令的使用

    功能最强大的编辑器之一——vivi是所有UNIX系统都会提供的屏幕编辑器,它提供了一个视窗设备,通过它可以编辑文件.当然,对UNIX系统略有所知的人,或多或少都觉得vi超级难用,但vi是最基本的编辑器 ...

  4. Understanding Kafka Consumer Groups and Consumer Lag

    In this post, we will dive into the consumer side of this application ecosystem, which means looking ...

  5. 滑动listview隐藏和显示顶部布局

    需求: 1.listview向下滑动时,隐藏顶部布局 2.listview向上滑动到最上面,显示顶部布局 3.顶部布局的隐藏和显示有过渡效果 4.第一次加载listview时,顶部不要隐藏 布局: 注 ...

  6. 【POI word】使用POI实现对Word的读取以及生成

    项目结构如下: 那第一部分:先是读取Word文档 package com.it.WordTest; import java.io.FileInputStream; import java.io.Fil ...

  7. LoadRunner脚本

    Action() { char *str1=(char *)malloc(1024*sizeof(char)); char *str2="0"; char *str3=(char ...

  8. Liferay 6.2 改造系列之八:修改默认安装的Portlet项目War包

    Liferay默认在Tomcat.Jetty等服务器情况下,自动安装marketplace-portlet-6.2.0.1.war包,实现应用商店的自动部署,一般不需要应用商店,故删除以下包即可: / ...

  9. json返回数据库的时间格式为/Date(1477294037000)/,怎样在前台进行格式化转换

    方法一: 原理是取中间的数,再转换成js的Date类型 function ChangeDateFormat(val) { if (val != null) { var date = new Date( ...

  10. Java 程序员们值得一看的好书推荐[转载]

    “学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他 ...