当前位置:学者斋 >

计算机 >java语言 >

Spring Boot如何实现日志记录SLF4J

Spring Boot如何实现日志记录SLF4J

Spring Boot如何实现日志记录SLF4J?下面本站小编带大家一起来看看详细内容,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!

Spring Boot如何实现日志记录SLF4J

在开发中打印内容,使用 tln() 和 Log4j 应当是人人皆知的方法了。

其实在开发中我们不建议使用 因为大量的使用 会增加资源的消耗。

而Log4j 更为灵活在性能上也相比 要高,我们可以配置输出级别,可以指定多个日志文件分别记录不同的日志。

使用 是在当前线程执行的,写入文件也是写入完毕后才继续执行下面的程序。而使用Log工具不但可以控制日志是否输出,怎么输出,它的处理机制也是通知写日志,继续执行后面的代码不必等日志写完。

如非必要,建议大家不要使用控制台输出,因为控制台输出没有优先级会显得输出太乱。

个人推荐使用 SLF4J(Simple Logging Facade For Java)的logback来输出日志,其比log4j 要好,因为他效率更高。

spring Boot 提供了一套日志系统,logback是最优先的选择。配置了可以利用Spring Boot提供的默认日志配置:

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

<configuration>

<include resource="org/springframework/boot/logging/logback/"/>

<logger name="" level="DEBUG"/>

</configuration>

这样就定义了一个 捕获 的日志,日志级别是 DEBUG,上面引用的 文件内容为:

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

<!--

Base logback configuration provided for compatibility with Spring Boot 1.1

-->

<included>

<include resource="org/springframework/boot/logging/logback/" />

<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${ir:-/tmp}}/}}"/>

<include resource="org/springframework/boot/logging/logback/" />

<include resource="org/springframework/boot/logging/logback/" />

<root level="INFO">

<appender-ref ref="CONSOLE" />

<appender-ref ref="FILE" />

</root>

</included>

Spring Boot的日志系统预先定义了一些系统变量:

PID,当前进程ID{LOG_FILE},Spring Boot配置文件(erties|)中的值

${LOG_PATH}, Spring Boot配置文件中的值

同时默认情况下包含另个appender——一个是控制台,一个是文件,分别定义在和中。同时对于应用的日志级别也可以通过erties进行定义:

=DEBUG

le=TRACE

这样相当于我们在 中配置的对应的日志级别。名称以l开头,后面跟要输入日志的包名。

如果在 和 erties 中定义了相同的配置(如都配置了 )但是输出级别不同,则实际上 erties 的优先级高于 *

我们既然使用了maven来管理项目,我们就可以根据不同环境来定义不同的日志输出,在 中使用 springProfile 节点来定义,方法如下:

注意文件名称不是,想使用spring扩展profile支持,要以命名

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

<configuration>

<include resource="org/springframework/boot/logging/logback/" />

<logger name="" level="INFO"/>

<logger name="le" level="TRACE" />

<springProfile name="dev">

<logger name="le" level="DEBUG" />

</springProfile>

<springProfile name="staging">

<logger name="le" level="INFO" />

</springProfile>

</configuration>

如上我们默认为 le 定义了TRACE级别的输出,下面又定义两个 springProfile ,分别是 dev 和 staging,输出级别分别是 DEBUG 和 INFO

我们可以启动服务的时候指定 profile (如不指定使用默认),如指定staging 的方式为:

java -jar ve=staging

  下面介绍两种常用的'Appender

  ConsoleAppender

Logback使用appender来定义日志输出,在开发过程中最常用的是将日志输出到控制台:

<appender name="consoleAppender" class="oleAppender">

<encoder>

<Pattern>.%d{HH:mm:} [%thread] %-5level %logger{36} - %msg %n</Pattern>

</encoder>

<filter class="sholdFilter">

<level>TRACE</level>

</filter>

</appender>

  表示对日志进行编码

%d{HH:mm:}——日志输出时间

%thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用

%-5level——日志级别,并且使用5个字符靠左对齐

%logger{36}——日志输出者的名字

%msg——日志消息

%n——平台的换行符

  在这种格式下一条日志的输出结果如下:

10:12:51.012 [threadName] DEBUG ingResponseFilter

  RollingFileAppender

另一种常见的日志输出到文件,随着应用的运行时间越来越长,日志也会增长的越来越多,将他们输出到同一个文件并非一个好办法。RollingFileAppender用于切分文件日志:

<appender name="dailyRollingFileAppender" class="ingFileAppender">

<File>/data/log/</File>

<rollingPolicy class="BasedRollingPolicy">

<!-- daily rollover -->

<FileNamePattern>rest-demo.%d{yyyy-MM-dd}</FileNamePattern>

<!-- keep 30 days' worth of history -->

<maxHistory>30</maxHistory>

</rollingPolicy>

<encoder>

<Pattern>%d{HH:mm:} [%thread] %-5level %logger{35} - %msg %n</Pattern>

</encoder>

</appender>

其中重要的是rollingPolicy的定义,上例中rest-demo.%d{yyyy-MM-dd}定义了日志的切分方式——把每一天的日志归档到一个文件中,30表示只保留最近30天的日志,以防止日志填满整个磁盘空间。同理,可以使用%d{yyyy-MM-dd_HH-mm}来定义精确到分的日志切分方式。

  Sentry

Sentry是一个统一的日志跟踪平台,在传统的日志管理中,都是在服务器上通过tail, vim等工具查看日志,并且不同的日志位置也个不相同,而Sentry则是将这些日志(主要是错误日志)通过统一的接口收集起来,并且提供跟踪、管理的功能,使得应用程序的错误、Bug能够即时被解决。

Sentry提供了Java库——Raven Java,Java应用程序能够在捕获异常后将其发送到Sentry服务器中,另一方面它包含了各类日志框架的支持,以Logbakc为例:

<dependency>

<groupId>n</groupId>

<artifactId>raven-logback</artifactId>

<version>6.0.0</version>

</dependency>

在中定义appender:

<configuration>

<appender name="Sentry" class="ryAppender">

<dsn>https://publicKey:secretKey@host:port/1?options</dsn>

<tags>tag1:value1,tag2:value2</tags>

<!-- Optional, allows to select the ravenFactory -->

<!--<ravenFactory>ultRavenFactory</ravenFactory>-->

</appender>

<root level="warn">

<appender-ref ref="Sentry"/>

</root>

</configuration>

我们推荐在这个中加入用于过滤 ERROR 级别的日志。

  总结

在Spring Boot 中记录日志只需两步:

1、在 src/main/resources 下面创建 文件,并按上面讲述的进行配置。

或者使用最简单的方法在 application 配置文件中配置。

2、在Java代码中创建实例,并在需要输出日志的地方使用。

// 在Java类中创建 logger 实例

private static final Logger logger = ogger(s);

// 在方法中使用日志输出,如

public void logTest() {

g("日志输出测试 Debug");

e("日志输出测试 Trace");

("日志输出测试 Info");

}

标签: Spring Boot SLF4J 日志
  • 文章版权属于文章作者所有,转载请注明 https://xuezhezhai.com/jsj/java/qxg3g.html