【Java】Java(四十八):日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1. 概述程序中的日志可以用来记录程序在运行的时候点点滴滴。并可以进行永久存储。日志与输出语句的区别

1. 概述


程序中的日志可以用来记录程序在运行的时候点点滴滴。并可以进行永久存储。

日志与输出语句的区别

82f4d2d5744f47fdb12cdaa6711e85ca.png

2. 日志体系结构和Log4J

  • 体系结构

4ab75a13dcd248c3a3010f84ba51f207.png

Log4J

Log4j是Apache的一个开源项目。

通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件等位置。

我们也可以控制每一条日志的输出格式。

通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

  • Apache基金会
    Apache软件基金会(也就是Apache Software Foundation,简称为ASF),为支持开源软件项目而办的一个非盈利性组织。

3. 入门案例

  • 使用步骤
  1. 导入log4j的相关jar包
  2. 编写log4j配置文件
  3. 在代码中获取日志的对象
  4. 按照级别设置记录日志信息

代码示例

// 测试类
public class Log4JTest01 {
  //使用log4j的api来获取日志的对象
  //弊端:如果以后我们更换日志的实现类,那么下面的代码就需要跟着改
  //不推荐使用
  //private static final Logger LOGGER =
  Logger.getLogger(Log4JTest01.class);
  //使用slf4j里面的api来获取日志的对象
  //好处:如果以后我们更换日志的实现类,那么下面的代码不需要跟着修改
  //推荐使用
  private static final Logger LOGGER =
  LoggerFactory.getLogger(Log4JTest01.class);
  public static void main(String[] args) {
  //1.导入jar包
  //2.编写配置文件
  //3.在代码中获取日志的对象
  //4.按照日志级别设置日志信息
  LOGGER.debug("debug级别的日志");
  LOGGER.info("info级别的日志");
  LOGGER.warn("warn级别的日志");
  LOGGER.error("error级别的日志");
  }
}

4. 配置文件详解

    Loggers(记录器) 日志的级别

    Loggers组件在此系统中常见的五个级别:DEBUG、INFO、WARN、ERROR 和 FATAL。

    DEBUG < INFO < WARN < ERROR < FATAL。

    Log4j有一个规则:只输出级别不低于设定级别的日志信息。

    Appenders(输出源) 日志要输出的地方

    把日志输出到不同的地方,如控制台(Console)、文件(Files)等。

    org.apache.log4j.ConsoleAppender(控制台)

    org.apache.log4j.FileAppender(文件)

    Layouts(布局) 日志输出的格式

    可以根据自己的喜好规定日志输出的格式

    常用的布局管理器:

    org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

    org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)

    org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

    配置根Logger

    格式

    log4j.rootLogger=日志级别,appenderName1,appenderName2,…

    日志级别

    OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。

    appenderName1

    就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。

    例如:log4j.rootLogger=INFO,ca,fa

    ConsoleAppender常用的选项

    ImmediateFlush=true

    表示所有消息都会被立即输出,设为false则不输出,默认值是true。

    Target=System.err

    默认值是System.out。

    FileAppender常用的选项

    ImmediateFlush=true

    表示所有消息都会被立即输出。设为false则不输出,默认值是true

    Append=false

    true表示将消息添加到指定文件中,原来的消息不覆盖。

    false则将消息覆盖指定的文件内容,默认值是true。

    File=D:/logs/logging.log4j

    指定消息输出到logging.log4j文件中

    PatternLayout常用的选项

    ConversionPattern=%m%n

    设定以怎样的格式显示消息

    相关实践学习
    日志服务之使用Nginx模式采集日志
    本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
    相关文章
    |
    4月前
    |
    Java Apache 开发工具
    【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
    【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
    |
    2月前
    |
    人工智能 Oracle Java
    解决 Java 打印日志吞异常堆栈的问题
    前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
    39 2
    |
    4月前
    |
    Java 应用服务中间件 HSF
    Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
    Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
    |
    4月前
    |
    Java 应用服务中间件 HSF
    Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
    Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
    |
    4月前
    |
    Java 应用服务中间件 HSF
    Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
    Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
    |
    4月前
    |
    存储 消息中间件 监控
    Java日志详解:日志级别,优先级、配置文件、常见日志管理系统ELK、日志收集分析
    Java日志详解:日志级别,优先级、配置文件、常见日志管理系统、日志收集分析。日志级别从小到大的关系(优先级从低到高): ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 低级别的会输出高级别的信息,高级别的不会输出低级别的信息
    |
    4月前
    |
    Java Linux C++
    【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
    【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
    |
    Java API Maven
    一文搞懂Java日志级别,重复记录、丢日志问题(下)
    一文搞懂Java日志级别,重复记录、丢日志问题
    1272 0
    一文搞懂Java日志级别,重复记录、丢日志问题(下)
    |
    XML 运维 Java
    一文搞懂Java日志级别,重复记录、丢日志问题(上)
    一文搞懂Java日志级别,重复记录、丢日志问题
    270 0
    一文搞懂Java日志级别,重复记录、丢日志问题(上)
    |
    14天前
    |
    设计模式 Java 开发者
    Java多线程编程的陷阱与解决方案####
    本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####