日志埋点 --- log4j的配置及使用

本文的运行环境为:IDEA + Maven,有关Maven框架的使用可自行百度。


1. 导入log4j包

在项目的pom.xml的标签下添加如下代码,然后等待Maven将log4j的包下载完成。

 
 
     log4j
     log4j
     1.2.17
 

2. 配置日志输出路径

(1)首先在项目的Resource目录下新建一个properties文件:log4j.properties。
项目路径如下图:
日志埋点 --- log4j的配置及使用_第1张图片
(2)在properties文件中进行配置,配置相关代码如下:

### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出INFO信息到/Users/zhuyidi/WorkSpace/log4j/logs/info.log ###
log4j.appender.stdout = org.apache.log4j.DailyRollingFileAppender
log4j.appender.stdout.File = /Users/zhuyidi/WorkSpace/log4j/logs/info.log
log4j.appender.stdout.Append = true
log4j.appender.stdout.Threshold = INFO
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [%C %t:%r ] - [ %p ]  %m%n

### 输出DEBUG 级别以上的日志到/Users/zhuyidi/WorkSpace/log4j/logs/debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /Users/zhuyidi/WorkSpace/log4j/logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [%C %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到/Users/zhuyidi/WorkSpace/log4j/logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = /Users/zhuyidi/WorkSpace/log4j/logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [%C %t:%r ] - [ %p ]  %m%n

其中ConversionPattern是用来定义日志输出格式,下面是有关输出格式的转换字符的说明:

c:category的名称,可使用{n}限制输出的精度。例如:logger名为"a.b.c",%c{2}将输出"b.c"。
C:产生log事件的java完全限定类名。可使用{n}限制输出的精度。例如:“org.apache.xyz.SomeClass”,%C{2}将输出“SomeClass”。
d:时间和日期的输出格式,例如:%d{yyyyMMddHH:mm:ss,SS},可不带后面的日期格式字符。
F:产生log事件的java源文件名,带“.java”后缀及包名称。
l:log发生位置的详细描述,包括方法名、文件名及行号。
L:log发生在源文件中的位置。
m:log事件的消息内容。
M:log发生时所在的方法名称。
n:根据所运行的平台输出相应的行分隔字符。
p:log事件的级别。
r:自程序运行至log事件产生所经过的时间。
t:产生log的线程名称。这里写自定义目录标题)

3. 一个小栗子

配置完成后,我们来写一个例子测试一下:

import org.apache.log4j.Logger;

/**
 * by yidi on 3/5/19
 */

public class Test {
    private static final Logger LOGGER = Logger.getLogger(Test.class);

    public static void main(String[] args) {
        Integer a = 1;

        LOGGER.info("test info");
        LOGGER.debug("test debug");
        LOGGER.error("test error");
        System.out.println("hello");
    }
}

生成的日志文件如图:
日志埋点 --- log4j的配置及使用_第2张图片
log4j会在新的一天产生新的日志的时候,在之前生成的log文件名后增加日期后缀,比如:error.log.2019-03-10,最新的日志的文件名是没有日期后缀的。

生成的日志文件的内容格式如下:

1. error.log

2019-03-11 10:07:41  [Test main:3 ] - [ ERROR ]  test error

2. info.log

2019-03-11 10:07:41  [Test main:0 ] - [ INFO ]  test info
2019-03-11 10:07:41  [Test main:3 ] - [ ERROR ]  test error

3. debug.log

2019-03-11 10:07:41  [Test main:0 ] - [ INFO ]  test info
2019-03-11 10:07:41  [Test main:3 ] - [ DEBUG ]  test debug
2019-03-11 10:07:41  [Test main:3 ] - [ ERROR ]  test error

4. 关于日志埋点的必要性

在开发一个项目或者系统的时候,往往都会有比较复杂的用户行为或者逻辑处理,这些行为的成功和失败、逻辑的处理结果,可能会在前端造成不同的错误;如果没有前端没有给出足够的错误信息,我们很难从前端的错误定位到后端具体的代码。所以,日志埋点就是为了解决这个问题。
在代码里合理的埋点,能帮助我们快速准确的定位错误、解决问题。通常情况下,我们会在try catch块的catch块中记录error日志,在用户行为结束的代码节点中记录info日志。
总而言之,日志埋点在我们的开发过程中,是非常有用且有必要的!

你可能感兴趣的:(Java)