SpringBoot日志记录

SpringBoot日志记录

1、基本市场上的日志类型

日志门面(日志的抽象层)日志实现
JCL(jakata Commons logging) 、SLF4j(Simple Logging Facade for java)、jboss-loggingLog4jJUL(java.util.logging) ,log4j2 ,logback

左边选择一个门面(抽象层),右边来选一个实现。
日志门面:SLF4j(Simple Logging Facade for java)
日志实现:logback ;

SpringBoot:中选择了SLF4j+logback

2、SLF4j的使用

1、如何使用SLF4j

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

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");
  }
}

官方提供的SLF4j的调用方法
在这里插入图片描述
绿色的都是适配层、深蓝的都是需要导入的包。
每一个日志的实现框架都有自己的配置文件,而这些配置文件还是做成日志实现框架本身的配置文件

2、遗留问题
多个框架有多种日志配置文件,需要替换掉之前的jar包。用新的替换包来代替原来的包。
在这里插入图片描述
如何让系统中所有的日志都统一到slf4j:

  • 1将系统中其他日志框架先排除
  • 2把替换的包放入框架中
  • 3导入slf4j的其他实现

3、SpringBoot日志关系

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

可以看到spring-boot-starter-logging中有三个转换的选择
在这里插入图片描述我们可以看到中间的转换包
在这里插入图片描述

public class SLF4JBridgeHandler extends Handler {
    private static final String FQCN = Logger.class.getName();
    private static final String UNKNOWN_LOGGER_NAME = "unknown.jul.logger";
    private static final int TRACE_LEVEL_THRESHOLD;
    private static final int DEBUG_LEVEL_THRESHOLD;
    private static final int INFO_LEVEL_THRESHOLD;
    private static final int WARN_LEVEL_THRESHOLD;

    public static void install() {
        LogManager.getLogManager().getLogger("").addHandler(new SLF4JBridgeHandler());
    }

    private static Logger getRootLogger() {
        return LogManager.getLogManager().getLogger("");
    }

  • 4、所以当我们引入了其他框架,我们一定要把这个框架的默认日志依赖移除掉

4、默认的日志

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootAutoconfigApplicationTests {
    //记录器
    Logger logger = LoggerFactory.getLogger(getClass());
    @Test
    public void contextLoads() {
        /**
         * 日志的级别就是按照这个顺序
         * 可以手动调整输出的日志级别
         */
        logger.trace("trace日志");
        logger.debug("debug日志");
        //sb中默认给我们使用info级别的日志,没有指定级别,就使用默认的root级别
        logger.info("info日志");
        logger.warn("warn日志");
        logger.error("error日志");
    }

}

我们可以在properties中修改日志的输出级别

logging.level.com.atlyb=trace
日志的输出格式:
		%的表示日期时间,
		%thread表示线程名,
		%-5level:日志的级别
		%logger(50)表示logger名字最长50个字符,否则按照句点分割
		%msg 日志的内容
		%n 换行
		%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger(50) - %msg%n
logging.level.com.atlyb=trace

#loggong.path
#不指定路径在当前项目下生成sb.log日志
#可以指定完整的路径
#logging.file=D:/loggsb.log
#在当前磁盘的根部路线创建spring文件夹和里边的log文件夹使用默认的spring.log作为输出文件
logging.path=/spring/log

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

我们也可以看看springboot的默认设置
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>

<!--
Default logback configuration provided for import, equivalent to the programmatic
initialization performed by Boot
-->

<included>
	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
	<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
	<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
	<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
	<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

	<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
	<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
	<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
	<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
	<logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
	<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
	<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
</included>
public class LoggingSystemProperties {
    public static final String PID_KEY = "PID";
    public static final String EXCEPTION_CONVERSION_WORD = "LOG_EXCEPTION_CONVERSION_WORD";
    public static final String LOG_FILE = "LOG_FILE";
    public static final String LOG_PATH = "LOG_PATH";
    public static final String CONSOLE_LOG_PATTERN = "CONSOLE_LOG_PATTERN";
    public static final String FILE_LOG_PATTERN = "FILE_LOG_PATTERN";
    public static final String FILE_MAX_HISTORY = "LOG_FILE_MAX_HISTORY";
    public static final String FILE_MAX_SIZE = "LOG_FILE_MAX_SIZE";
    public static final String LOG_LEVEL_PATTERN = "LOG_LEVEL_PATTERN";
    public static final String LOG_DATEFORMAT_PATTERN = "LOG_DATEFORMAT_PATTERN";
    private final Environment environment;

根据上一张所讲述的。这里我们看到了logging中的所有properties

自定义配置文件

同样很简单,我们自定义一个logback.xml,然后放在根文件。则会使用我们的配置文件

Logging SystemCustomization
Logbacklogback-spring.xml;logback-spring.groovy;logback.xml ;logback.groovy
log4j2log4j2-spring.xml ;log4h.xml
JDKlogging.properties

logback.xml 这种系统就直接识别了

然而如果使用spring-boot的功能,推荐使用logback-spring.xml,这种方式,比如:

//我们可以通过
<SpringProfile name='dev'></SpringProfile >
<SpringProfile name='!dev'></SpringProfile >
/*这种方式来规定日志的输出环境*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot 项目中记录日志可以使用 Logback 或者 Log4j2。这里以 Logback 为例,步骤如下: 1. 在 pom.xml 文件中添加 logback 依赖: ``` <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> ``` 2. 在 src/main/resources 目录下创建 logback.xml 文件,配置日志输出格式和输出位置等信息。以下是一个简单的示例配置文件: ``` <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/app.log</file> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <logger name="com.example" level="DEBUG" additivity="false"> <appender-ref ref="FILE" /> </logger> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration> ``` 这个配置文件中定义了两个 appender,一个是 CONSOLE,表示将日志输出到控制台;另一个是 FILE,表示将日志输出到文件中。其中,fileNamePattern 配置了日志文件的命名格式,maxHistory 配置了最多保存多少个历史日志文件。 3. 在代码中使用 LoggerFactory 获取 Logger 对象,然后即可进行日志记录。例如: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DemoController { private static final Logger logger = LoggerFactory.getLogger(DemoController.class); public void doSomething() { logger.debug("Debug log message"); logger.info("Info log message"); logger.warn("Warn log message"); logger.error("Error log message"); } } ``` 运行程序后,日志将会输出到控制台和指定的日志文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值