专栏首页Java开发者之家springboot-日志系统

springboot-日志系统

# 1.日志

市面上的日志框架;

JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....

日志门面 (日志的抽象层)

日志实现

JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-logging

Log4j JUL(java.util.logging) Log4j2 Logback

左边选一个门面(抽象层)、右边来选一个实现;

日志门面: SLF4J;

日志实现:Logback;

SpringBoot:底层是Spring框架,Spring框架默认是用JCL;‘

**==SpringBoot选用 SLF4j和logback;==**

# 2、SLF4j使用

# 1、如何在系统中使用SLF4j https://www.slf4j.org

以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;

给系统里面导入slf4j的jar和 logback的实现jar

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

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

1 2 3 4 5 6 7 8 9

每一个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件;

# 2、遗留问题

a(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging)、MyBatis、xxxx

统一日志记录,即使是别的框架和我一起统一使用slf4j进行输出?

如何让系统中所有的日志都统一到slf4j;

1.将系统中其他日志框架先排除出去;

2.用中间包来替换原有的日志框架;

3.我们再来导入slf4j其他的实现;

# 3.SpringBoot日志关系

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <version>2.1.3.RELEASE</version>
  <scope>compile</scope>
</dependency>

1 2 3 4 5 6

SpringBoot使用它来做日志功能

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-logging</artifactId>
  <version>2.1.3.RELEASE</version>
  <scope>compile</scope>
</dependency>

1 2 3 4 5 6

总结:

1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录

2)、SpringBoot也把其他的日志都替换成了slf4j;

3)、中间替换包?

@SuppressWarnings("rawtypes")
public abstract class LogFactory {

    static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J = "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";

    static LogFactory logFactory = new SLF4JLogFactory();

1 2 3 4 5 6

4)、如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉?

​ Spring框架用的是commons-logging;

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<exclusions>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

1 2 3 4 5 6 7 8 9 10

==SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可;==

# 4、日志使用;

# 1、默认配置

SpringBoot默认帮我们配置好了日志;

	//记录器
	Logger logger = LoggerFactory.getLogger(getClass());
	@Test
	public void contextLoads() {
		//System.out.println();

		//日志的级别;
		//由低到高   trace<debug<info<warn<error
		//可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效
		logger.trace("这是trace日志...");
		logger.debug("这是debug日志...");
		//SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
		logger.info("这是info日志...");
		logger.warn("这是warn日志...");
		logger.error("这是error日志...");


	}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

    日志输出格式:
		%d表示日期时间,
		%thread表示线程名,
		%-5level:级别从左显示5个字符宽度
		%logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
		%msg:日志消息,
		%n是换行符
    -->
    %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

SpringBoot修改日志的默认配置

logging.level.com.atguigu=trace


#logging.path=
# 不指定路径在当前项目下生成springboot.log日志
# 可以指定完整的路径;
#logging.file=G:/springboot.log

# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
logging.path=/spring/log

#  在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

logging.file

logging.path

Example

Description

(none)

(none)

只在控制台输出

指定文件名

(none)

my.log

输出日志到my.log文件

(none)

指定目录

/var/log

输出到指定目录的 spring.log 文件中

# 2、指定配置

给类路径下放上每个日志框架自己的配置文件即可;SpringBoot就不使用他默认配置的了

Logging System

Customization

Logback

logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy

Log4j2

log4j2-spring.xml or log4j2.xml

JDK (Java Util Logging)

logging.properties

logback.xml:直接就被日志框架识别了;

logback-spring.xml:日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能

<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
  	可以指定某段配置只在某个环境下生效
</springProfile>

1 2 3 4

如:

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--
        日志输出格式:
			%d表示日期时间,
			%thread表示线程名,
			%-5level:级别从左显示5个字符宽度
			%logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
			%msg:日志消息,
			%n是换行符
        -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <springProfile name="dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
            <springProfile name="!dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
        </layout>
    </appender>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

如果使用logback.xml作为日志配置文件,还要使用profile功能,会有以下错误

no applicable action for [springProfile]

# 5、切换日志框架

可以按照slf4j的日志适配图,进行相关的切换;

slf4j+log4j的方式;

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <artifactId>logback-classic</artifactId>
      <groupId>ch.qos.logback</groupId>
    </exclusion>
    <exclusion>
      <artifactId>log4j-over-slf4j</artifactId>
      <groupId>org.slf4j</groupId>
    </exclusion>
  </exclusions>
</dependency>

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

切换为log4j2

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-logging</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot 笔记 ( 三 ):日志系统

    SpringBoot 笔记 ( 三 ):日志系统 1、日志框架 日志框架就是防止我们再去像以前那样,一直进行System.out.println(“”)将关键数...

    lwen
  • 13.7 SpringBoot集成日志系统logback的几个问题问题1: Logging system failed to initialize using configuration from

    让人感到疑惑的是,SpringBoot居然没有对application.properties配置文件value末端作空格trim处理。

    一个会写诗的程序员
  • 日志系统

    上一篇说了一下《解决问题的一般套路》,里面讲到了日志系统的重要性,日志重要吗?监控重要吗?of course!日志就是要能找到用户做了什么请求那个...

    只喝牛奶的杀手
  • SpringBoot 系列-日志详解

    默认情况下,如果使用 “starters”,则使用 Logback 进行日志记录。还包括适当的 Logback 路由,以确保使用 Java Util 日志记录、...

    用户4044670
  • linux日志系统

    linux 软件 syslog syslog-ng(next generation) 日志系统:syslog 负责统一记录日志 syslog服务: syslog...

    若与
  • MySQL 日志系统

    上一篇学习了 SQL 的执行过程,这一篇主要的学习内容就在其基础上新增了一个重要的知识点,日志系统。

    星尘的一个朋友
  • Loki日志系统

    Loki的第一个稳定版本于2019年11月19日发布,是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。 Gr...

    py3study
  • MySQL日志系统

    通过上述流程可以很明显看出,更新操作采用了两阶段提交算法,主要是为了保证 redo log 和 binlog 的数据一致性。两阶段提交是跨系统维持数据逻辑一致性...

    张申傲
  • Java 日志系统

    注意:该注解也是 lombok 功能的一部分,需要先安装 lombok 插件和 lombok 依赖。

    希希里之海
  • RHEL7.0 日志系统

    进程和操作系统内核需要能够未发生的时间记日志。这些日志可用于系统审核和问题的故障排除。依照惯例,这些日志永久存储在 /var/log 目录中

    用户8710643
  • SpringBoot入门系列(十一)统一日志收集!

    今天主要讲解Spring Boot中的日志收集,日志是追踪错误定位问题的关键,特别在生产环境中,我们需要通过日志快速定位解决问题。

    架构师精进
  • SpringBoot日志

    HUC思梦
  • MyBatis的日志系统

    https://github.com/unclehh/mybatis-review.git

    叔叔
  • C# 写系统日志

    因为我不想使用自己写文件,我的软件是绿色的,所以把日志写到 Windows 日志。

    林德熙
  • 10.34 linux系统日志

    linux系统日志 /var/log/messages //是linux系统一个总的日志——>除非某些服务,有定义单独的日志 /etc/logro...

    运维小白
  • 日志审计系统

    随着信息化进程的深入和互联网的迅速发展,人们的工作、学习和生活方式正在发生巨大变化,效率大为提高,信息资源得到最大程度的共享。紧随信息化发展而来的网络安全问题日...

    数据库保护
  • MySQL(二)日志系统

    MySQL可以恢复到半个月内任意一秒的状态. mysql> create table T(ID int primary key, c int);

    JNJYan
  • Rsyslog+H3C日志系统

    [9F-3600V2-EI]info-center loghost 192.168.11.36

    py3study
  • 十.Linux日志系统

    在 Linux 系统中,日志文件记录了系统中包括内核、服务和其它应用程序等在内的运行信息。 在我们解决问题的时候,日志是非常有用的,它可以帮助我们快速的定位遇...

    对弈

扫码关注云+社区

领取腾讯云代金券