Java日志框架——Logback

  • 简介
    • 1.1 Logback概述
    • 1.2 日志级别
    • 1.3 组件
    • 1.4 配置文件
    • 1.5 日志输出格式
  • 项目中应用步骤
    • 2.1 依赖
    • 2.2 日志输出到控制台
      • 2.2.1 logback.xml 配置文件模板
      • 2.2.2 测试类
    • 2.3 日志输出到文件中
      • 2.3.1 logback.xml 配置文件模板
    • 2.4 按照日志级别输出日志到指定文件夹

参考博客:长路

简介

1.1 Logback概述

   logback可以看作是log4j的升级版;logback分为三个模块, logback-corelogback-classiclogback-access,其中 logback-core是核心,其他两个模块依赖core。

  • logback-core 是其它两个模块的基础模块。
  • logback-access 访问模块与Servlet容器集成提供通过Http来访问日志的功能。
  • logback-classic 是 log4j 的一个改良版本。logback-classic完整实现SLF4J API。

1.2 日志级别

package ch.qos.logback.classic;public final class Level implements Serializable {public static final Level OFF = new Level(2147483647, "OFF");public static final Level ERROR = new Level(40000, "ERROR");public static final Level WARN = new Level(30000, "WARN");public static final Level INFO = new Level(20000, "INFO");public static final Level DEBUG = new Level(10000, "DEBUG");public static final Level TRACE = new Level(5000, "TRACE");public static final Level ALL = new Level(-2147483648, "ALL");...
}

日志级别排序为:TRACE< DEBUG<INFO< WARN<ERROR

默认日志等级为Debug,其中OFFALL作为日志开关。

1.3 组件

Logger:日志的记录器,主要用于存放日志对象,也可以定义日志类型、级别。

Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。

Layout:负责把事件转换成字符串,格式化的日志信息的输出。

在 Logback 中 Layout 对象被封装在encoder中。 也就是说我们未来使用的 encoder 其实就是Layout。

配置 介绍
``
<springProperty> 通过该标签可以直接读取 application.yml 等配置文件中的配置
``

1.4 配置文件

Logback提供了3种配置文件

  • logback.groovy
  • logback-test.xml
  • logback.xml(常用)(Maven 项目通常放在resource文件夹中)

如果都不存在则采用默认的配置。(日志等级为DEBUG,默认输出到console)

1.5 日志输出格式

命令 解释
%-5level level日志等级设置为 5 个字符,左对齐
%d{yyyy-MM-dd HH:mm:ss.SSS} 日期(例如:2022-10-18 21:39:22.681)
%c 当前类的完整名称(全限定名)
%M 当前执行日志的方法
%L 行号
%thread 线程名称
%m或者%msg 信息
%n 换行

项目中应用步骤

注意:SpringBoot 配置文件的加载顺序如下:

logback.xml ——> application.properties ——> logback-spring.xml

2.1 依赖

<!--  slf4j核心依赖   -->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version>
</dependency>
<!-- Logback 日志实现 -->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId>
<version>1.2.11</version>

2.2 日志输出到控制台

2.2.1 logback.xml 配置文件模板

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!--  property 配置通用属性,方便后面的配置通过${name}形式引用  --><!--  %-5level level级别案例为设置5个字符,左对齐%d{yyyy-MM-dd HH:mm:ss} 日期%c 当前类全限定名%M 当前执行日志的方法%L 行号%thread 线程名称%m或者%msg 信息%n 换行  --><!--  配置日志输出格式  --><!--  以property形式将日志输出格式配置为文件通用的属性,后面配置输出方式可以重复复引用该通用属性 --><property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c %M %L %thread %m%n"/><!--  配置控制台 appender  --><appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"><!-- 日志输出目标的配置默认:System.out 表示黑色字体输出日志设置:System.err 表示红色字体输出日志--><target>System.out</target><!--  配置日志输出格式  --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--  引用 输出格式的 通用配置属性(引用上面的<property>标签中的日志格式)  --><pattern>${pattern}</pattern></encoder></appender><!--  配置日志记录器  --><root level="All"><!--  引入appender  --><appender-ref ref="consoleAppender"></appender-ref></root>
</configuration>

2.2.2 测试类

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** logback日志框架管理*/
public class LogbackTest {@Testpublic void logTest(){Logger logger = LoggerFactory.getLogger(LogbackTest.class);logger.error("error 错误信息");logger.warn("warn 警告信息");logger.info("info 运行信息");logger.debug("debug 调试信息");logger.trace("trace 追踪信息");}}

运行日志截图

2.3 日志输出到文件中

2.3.1 logback.xml 配置文件模板

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!--  property 配置通用属性,方便后面的配置通过${name}形式引用  --><!--  %-5level level级别案例为设置5个字符,左对齐%d{yyyy-MM-dd HH:mm:ss} 日期%c 当前类全限定名%M 当前执行日志的方法%L 行号%thread 线程名称%m或者%msg 信息%n 换行  --><!--  配置日志输出格式  --><!--  以property形式将日志输出格式配置为文件通用的属性,后面配置输出方式可以重复复引用该通用属性 --><property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c %M %L %thread %m%n"/><!-- 配置文件输出路径 (将日志信息输出到项目类路径下的logs目录中的log.txt文件中) --><property name="logDirectory" value="./logs/log.txt" /><!-- 配置控制台 appender --><appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"><!-- 日志输出目标的配置默认:System.out 表示黑色字体输出日志设置:System.err 表示红色字体输出日志--><target>System.out</target><!--  配置日志输出格式  --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--  引用 输出格式的 通用配置属性(引用上面的<property>标签中的日志格式)  --><pattern>${pattern}</pattern></encoder></appender><!-- 配置文件 appender --><appender name="fileAppender" class="ch.qos.logback.core.FileAppender"><!-- 引入文件位置 --><file>${logDirectory}</file><!--  配置日志输出格式  --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--  引用 输出格式的 通用配置属性(引用上面的<property>标签中的日志格式)  --><pattern>${pattern}</pattern></encoder></appender><!--  配置日志记录器  --><root level="All"><!--  引入控制台 appender  --><appender-ref ref="consoleAppender" /><!--  引入文件 appender  --><appender-ref ref="fileAppender" /></root>
</configuration>

运行效果:

2.4 按照日志级别输出日志到指定文件夹

yml 配置:

# logback日志存放位置
log:path:windows: /home/data/logs# 打印sql日志
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl

备注:
mybatis-plus日志配置,使用org.apache.ibatis.logging.stdout.StdOutImpl只能打印SQL日志在控制台;如果想要SQL日志d印在日志文件中需要使用org.apache.ibatis.logging.slf4j.Slf4jImpl

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true"><!--     <include resource="org/springframework/boot/logging/logback/base.xml" /> --><!-- 不直接引用base.xm, 改为引入依赖的文件, 防止多个app部署同一套环境,导致/tmp/spring.log 权限问题 --><include resource="org/springframework/boot/logging/logback/defaults.xml"/><include resource="org/springframework/boot/logging/logback/console-appender.xml"/><include resource="org/springframework/boot/logging/logback/file-appender.xml"/><!-- 日志格式化模板 ,输出样例如下: --><property name="FILE_LOG_PATTERN" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c %M %L %thread %m%n"/><!-- APP 名称配置, 每个App都需要配置 --><property name="APP_NAME" value="monitor" /><!-- APP安装Home目录配置, 每个App都需要配置 --><springProperty scope="context" name="APP_HOME" source="log.path.linux" /><property name="LOG_HOME_PATH" value="${APP_HOME}/${APP_NAME}" /><property name="DEBUG_LOG_FILE" value="${LOG_HOME_PATH}/debug/${APP_NAME}_debug"/><property name="INFO_LOG_FILE" value="${LOG_HOME_PATH}/info/${APP_NAME}_info"/><property name="WARN_LOG_FILE" value="${LOG_HOME_PATH}/warn/${APP_NAME}_warn"/><property name="ERROR_LOG_FILE" value="${LOG_HOME_PATH}/error/${APP_NAME}_error"/><property name="SQL_LOG_FILE" value="${LOG_HOME_PATH}/sql/${APP_NAME}_sql"/><!-- Error 级别 日志配置 --><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>${FILE_LOG_PATTERN}</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${ERROR_LOG_FILE}.%d{yyyy-MM-dd}.log</FileNamePattern><MaxHistory>60</MaxHistory></rollingPolicy><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印ERROR日志 --><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- INFO 级别 日志配置 --><appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>${FILE_LOG_PATTERN}</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${INFO_LOG_FILE}.%d{yyyy-MM-dd}.log</FileNamePattern><MaxHistory>60</MaxHistory></rollingPolicy><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印INFO日志 --><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- WARN 级别 日志配置 --><appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>${FILE_LOG_PATTERN}</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${WARN_LOG_FILE}.%d{yyyy-MM-dd}.log</FileNamePattern><MaxHistory>60</MaxHistory></rollingPolicy><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印WARN日志 --><level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- DEBUG 级别 日志配置 --><appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>${FILE_LOG_PATTERN}</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${DEBUG_LOG_FILE}.%d{yyyy-MM-dd}.log</FileNamePattern><MaxHistory>60</MaxHistory></rollingPolicy><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印DEBUG日志 --><level>DEBUG</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><appender name="SQL_FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${SQL_LOG_FILE}.%d{yyyy-MM-dd}.log</FileNamePattern><MaxHistory>60</MaxHistory></rollingPolicy><encoder><pattern>${FILE_LOG_PATTERN}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印DEBUG日志 --><level>DEBUG</level></filter></appender><logger name="com.jpin.water.dal.mapper" level="DEBUG" additivity="false"><appender-ref ref="SQL_FILE" /></logger><!-- 按包名称拆分日志级别后输出文件(指定不同的appender);<loger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。name:用来指定受此loger约束的某一个包或者具体的某一个类。 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO,WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。addtivity:是否向上级loger传递打印信息。默认是true。 --><!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:用来设置打印级别, 大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL,默认是DEBUG.;另外Spring Boot 最好开启 INFO 级别或以上 日志,否则基础Debug日志会相当多,影响性能 --><root level="INFO"><appender-ref ref="DEBUG_FILE"/><appender-ref ref="INFO_FILE"/><appender-ref ref="WARN_FILE"/><appender-ref ref="ERROR_FILE"/></root></configuration>

Java日志框架——Logback相关推荐

  1. Java日志框架:Logback

    文章目录 0. 概述 1. Logback 1.1 Logback概述 1.2 Logback使用步骤 1.3 logback.xml配置详解 1.3.1 Logback日志输出位置.格式设置: 1. ...

  2. Java日志框架-logback的介绍及配置使用方法(纯Java工程)

    说明:内容估计有些旧,2011年的,但是大体意思应该没多大变化,最新的配置可以参考官方文档. 一.logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分 ...

  3. Java日志框架-Logback手册中文版以及官方配置文档教程

    Logback手册中文版:(链接: https://pan.baidu.com/s/1bpMyasR 密码: 6u5c),虽然版本有点旧,但是大体意思差不多,先用中文版了解个大概,然后一切最新的配置以 ...

  4. java log4j logback jcl_进阶之路:Java 日志框架全画传(下)

    导读:随着互联网和大数据的蓬勃发展,分布式日志系统以及日志分析系统得到了广泛地应用.目前,几乎在所有应用程序中,都会用到各种各样的日志框架来记录程序的运行信息.鉴于此,工程师十分有必要熟悉主流的日志记 ...

  5. java日志框架JUL、JCL、Slf4j、Log4j、Log4j2、Logback 一网打尽

    为什么程序需要记录日志 我们不可能实时的24小时对系统进行人工监控,那么如果程序出现异常错误时要如何排查呢?并且系统在运行时做了哪些事情我们又从何得知呢?这个时候日志这个概念就出现了,日志的出现对系统 ...

  6. 【spring boot】8.spring boot的日志框架logback使用

    在继续上一篇的Debug调试之后,把spring boot的日志框架使用情况逐步蚕食. 参考:http://tengj.top/2017/04/05/springbo 开篇之前,贴上完整applica ...

  7. 获取日志的等级_进阶之路:Java 日志框架全画传(中)

    导读:随着互联网和大数据的蓬勃发展,分布式日志系统以及日志分析系统得到了广泛地应用.目前,几乎在所有应用程序中,都会用到各种各样的日志框架来记录程序的运行信息.鉴于此,工程师十分有必要熟悉主流的日志记 ...

  8. Java日志框架 -- 日志框架介绍、日志门面技术、JUL日志(JUL架构、JUL入门示例、JUL日志级别、JUL日志的配置文件)

    1. 日志的概念 日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志.具有处理历史数据.诊断问题的追踪以及理解系统的活动等重要作用. 2. Java日志框架 问题: 控制日志输出的内容 ...

  9. Java日志框架简介

    一.java日志发展线路图 上面涵盖了java世界里主要的日志框架或门面,注意,jcl和slf4j是日志门面,因此,在slf4j之前的日志框架,要使用桥接模式来适应slf4j的通用接口,达到统一接口调 ...

最新文章

  1. java.io.IOException: Stream closed
  2. 日常工作部门及体系相关单词
  3. Intel Realsense D435 USB线长、光纤线长测试(使用普通USB3.0数据线最长不能超过4M,使用普通USB3.0数据线+USB3.0光纤数据线,不能超过1+5=6M)
  4. 论文阅读(1)--Fine-grained Image Classification by Exploring Bipartite-Graph Labels
  5. pat根据中序遍历和先序遍历_[leetcode/lintcode 题解] 前序遍历和中序遍历树构造二叉树...
  6. html5鼠标下拉浮窗固定,【前端技术】vue-floating-menu可拖拽吸附的浮窗菜单
  7. Redmi Note10系列配LCD居中挖孔屏:5月26日正式发布
  8. 商务先锋 多功能一体化网络营销软件
  9. 失去手臂五年后,这个仿生机械臂帮他重拾钢琴曲演奏
  10. 伴随矩阵,可逆矩阵相关思路分析之一
  11. 使用VS.NET2003操作SQLServer DTS.
  12. Python 集合 day3
  13. 海康威视多路播放开发步骤及参考代码
  14. 合成孔径雷达(微波遥感)的应用
  15. Word365英文版,文字垂直居中
  16. 网线/双绞线相关知识
  17. ETL——实现Kettle作业定时任务
  18. c语言母亲节算法,用Excel推算母亲节日期,能理解最后一种算法的是高手!
  19. 面向三种典型程序语言的中小学计算思维课堂设计研究
  20. C语言程序设计第四次作业——选择结构(2)

热门文章

  1. 循环往复 志在千里-while语句(C语言)
  2. 文本议题分类及态度赋值分类
  3. 安装jdk并配置环境变量
  4. PCB电路设计的14个误区
  5. VIVADO如何手动布局布线
  6. 西门子S7-1200 移位指令SHL
  7. 中国顶级门户网站架构分析1
  8. 查看 找回 SecureCRT的密码
  9. 为AI而生的IPU芯片,或挑战GPU的霸主位?
  10. APP开发者个人信息保护培训宣讲会(友盟+站)在杭州成功举办