日志技术

93 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

日志技术和输出语句的区别

输出语句的弊端

  • ① 想要取消记录的信息,需要修改代码才能完成。
  • ② 信息只能展示在控制台,不能将其记录到其他的位置(文件、数据库等)。

日志

  • 生活中的日志:生活中的日志就好比日记,可以记录生活中的点点滴滴。
  • 程序中的日志:程序中的日志可以记录程序在运行的时候的点点滴滴,并可以进行永久存储。

区别

输出语句日志技术
取消日志需要修改代码,灵活性较差不需要修改代码,灵活性较好
输出位置只能是控制台可以将日志信息写入到文件或数据库中
多线程和业务代码处于一个线程中多线程方式记录日志,不影响业务代码的性能

日志技术的体系结构

image.png

Log4j

  • Log4j 是 Apache 的一个开源项目。
  • 通过使用 Log4j ,我们可以控制日志信息输出的 目的地是控制台、文件 等位置。
  • 通过使用 Log4j ,我们可以 控制 每一条 日志输出格式
  • 通过使用 Log4j ,我们可以 定义 每一条 日志 信息的 级别 ,能够更加细致的控制日志的生成过程。
  • 上述的功能都可以通过一个 配置文件 来灵活的配置,而不需要修改应用的代码。

Log4j的入门

  • Log4j 的开发流程:
  • ③ 在代码中获取日志的对象。
  • ④ 按照级别设置记录日志信息。

  • 示例:

  • log4j.properties
log4j.rootLogger=debug,my,fileAppender
### direct log messages to my ###
log4j.appender.my=org.apache.log4j.ConsoleAppender
log4j.appender.my.ImmediateFlush=true
log4j.appender.my.Target=System.out
log4j.appender.my.layout=org.apache.log4j.PatternLayout
log4j.appender.my.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n
# fileAppender演示ʾ
log4j.appender.fileAppender=org.apache.log4j.FileAppender
log4j.appender.fileAppender.ImmediateFlush=true
log4j.appender.fileAppender.Append=true
log4j.appender.fileAppender.File=D:/log4j-log.log
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=%d %5p %c{1}:%L - %m%n
  • Log4jTest01.java
package com.github.demo2;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Log4jTest01 {
    // 使用Slf4j中的API来获取日志的对象
    // 好处:如果以后我们需要更换日志的实现,那么下面的代码不需要随之修改
    // 推荐使用
    private static Logger LOGGER = LoggerFactory.getLogger(Log4jTest01.class);

    public static void main(String[] args) {
        LOGGER.debug("debug级别的日志");
        LOGGER.info("info级别的日志");
        LOGGER.warn("warn级别的日志");
        LOGGER.error("error级别的日志");
    }
}

Log4j 的组成

  • Loggers:记录器,日志的级别。
  • Loggers 组件在系统中常见的5个级别:debug 、info 、warn 、error 、fatal。
  • debug < info < warn < error < fatal。
  • Log4j 有一个规则:只输出级别不低于设定级别的日志信息 。换言之,如果设置的日志级别是 info ,那么只能输出 info 、warn 、error 和 fatal 级别的日志信息。
  • Appenders:输出源,日志要输出的地方,比如控制台(console)、文件(files)等。
  • org.apache.log4j.ConsoleAppender:控制台。
  • org.apache.log4j.FileAppender:文件。
log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.设置1=值1
log4j.appender.ca.设置2=值2
log4j.appender.ca.设置3=设置3
log4j.appender.ca.设置4=设置4
...
log4j.appender.ca.设置n=设置n
  • Layouts:布局,可以根据自己的洗好规定日志输出的格式
  • 常见的布局管理器:
  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式),常用。
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.设置1=值1
log4j.appender.ca.layout.设置2=值2
log4j.appender.ca.layout.设置3=设置3
log4j.appender.ca.layout.设置4=设置4
...
log4j.appender.ca.layout.设置n=设置n

Log4j 的配置文件

配置文件示例

log4j.rootLogger=debug,ca,fileAppender # 根Logger

log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.ImmediateFlush=true
log4j.appender.ca.Target=System.out
log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n

配置根 Logger

  • 格式:log4j.rootLogger=-日志级别,appenderName1,appenderName2,appenderName3,...
  • 日志级别:
  • off 、debuginfowarnerror 、fatal 、all 或者自定义的级别。
  • appenderName1:就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。如:log4j.rootLogger=INFO,ca,fa

  • 配置 appender

log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.ImmediateFlush=true
log4j.appender.ca.Target=System.out
  • log4j.appender.ca:
  • org.apache.log4j.ConsoleAppender:向控制台输出。
  • org.apache.log4j.FileAppender:向文件输出。
  • ConsoleAppender的常用选项:
  • ImmediateFlush=true:表示所有的消息被立即输出,设置为 false 则不输出,默认值为 true。
  • Target=System.err:默认是 System.out 。
  • FileAppender的常用选项:
  • ImmediateFlush=true:表示所有的消息被立即输出,设置为false则不输出,默认值为 true。
  • Append=true:true 表示将消息添加到指定文件中,原来的消息不覆盖;false 则将消息覆盖指定的文件内容,默认值为 true。
  • File=D:/log4j-log.log:指定消息输出到 log4j-log.log 文件中。

配置layout

log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n
  • log4j.appender.ca.layout:
  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式),常用
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)。
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)。
  • PatternLayout的常见选项:
  • ConversionPattern=%d %t %5p %c{1}:%L - %m%n,设定以怎么样的格式显示消息。

image.png