Spring Boot日志的打印与持久化实例分析

发布时间:2022-08-17 17:30:22 作者:iii
来源:亿速云 阅读:278

Spring Boot日志的打印与持久化实例分析

引言

在软件开发过程中,日志记录是一个非常重要的环节。它不仅可以帮助开发者调试和排查问题,还可以用于监控系统的运行状态。Spring Boot作为目前非常流行的Java开发框架,提供了强大的日志管理功能。本文将详细介绍如何在Spring Boot项目中打印日志,并将日志持久化到文件中,以便后续分析和审计。

1. Spring Boot日志框架简介

Spring Boot默认使用Logback作为日志框架,同时也支持Log4j2Java Util Logging。Spring Boot通过spring-boot-starter-logging模块自动配置日志框架,开发者无需手动配置即可使用。

1.1 Logback简介

Logback是Log4j的继任者,由Log4j的作者Ceki Gülcü开发。Logback具有更高的性能、更丰富的功能和更好的灵活性。Spring Boot默认使用Logback作为日志框架,因此本文将重点介绍Logback的使用。

1.2 日志级别

日志级别用于控制日志的输出粒度,常见的日志级别从低到高依次为:

2. Spring Boot日志打印

2.1 默认日志配置

Spring Boot默认配置了日志输出到控制台,并且日志级别为INFO。开发者可以通过在application.propertiesapplication.yml文件中修改日志配置。

2.1.1 修改日志级别

可以通过以下配置修改日志级别:

# application.properties
logging.level.root=WARN
logging.level.com.example=DEBUG
# application.yml
logging:
  level:
    root: WARN
    com.example: DEBUG

上述配置将根日志级别设置为WARN,并将com.example包下的日志级别设置为DEBUG

2.1.2 输出日志到控制台

Spring Boot默认将日志输出到控制台,开发者可以通过以下配置修改日志输出的格式:

# application.properties
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
# application.yml
logging:
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

上述配置将日志输出格式设置为日期时间 - 日志信息

2.2 使用SLF4J打印日志

SLF4J(Simple Logging Facade for Java)是一个日志门面框架,它提供了统一的日志接口,开发者可以通过SLF4J使用不同的日志实现(如Logback、Log4j2等)。

在Spring Boot项目中,通常使用org.slf4j.Logger接口打印日志。以下是一个简单的示例:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    private static final Logger logger = LoggerFactory.getLogger(MyService.class);

    public void doSomething() {
        logger.trace("This is a TRACE message");
        logger.debug("This is a DEBUG message");
        logger.info("This is an INFO message");
        logger.warn("This is a WARN message");
        logger.error("This is an ERROR message");
    }
}

在上述示例中,LoggerFactory.getLogger(MyService.class)用于获取MyService类的日志记录器。通过调用logger.trace()logger.debug()等方法,可以打印不同级别的日志。

3. Spring Boot日志持久化

在实际生产环境中,通常需要将日志持久化到文件中,以便后续分析和审计。Spring Boot提供了简单的配置,可以将日志输出到文件中。

3.1 输出日志到文件

可以通过以下配置将日志输出到文件中:

# application.properties
logging.file.name=myapp.log
logging.file.path=/var/logs
# application.yml
logging:
  file:
    name: myapp.log
    path: /var/logs

上述配置将日志输出到/var/logs/myapp.log文件中。如果只配置logging.file.name,日志文件将生成在项目的根目录下。

3.2 日志文件滚动策略

在生产环境中,日志文件可能会变得非常大,因此需要配置日志文件的滚动策略。Logback提供了TimeBasedRollingPolicySizeBasedTriggeringPolicy等策略,可以根据时间和文件大小滚动日志文件。

可以通过以下配置实现日志文件的滚动:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>

上述配置将日志文件按天滚动,并且每个日志文件的最大大小为10MB,最多保留30天的日志文件。

3.3 日志文件压缩

为了节省磁盘空间,可以对日志文件进行压缩。可以通过以下配置实现日志文件的压缩:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>

上述配置将日志文件按天滚动,并且每个日志文件的最大大小为10MB,最多保留30天的日志文件,并且对日志文件进行压缩。

4. 日志格式自定义

Spring Boot允许开发者自定义日志的输出格式。可以通过以下配置自定义日志格式:

# application.properties
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
# application.yml
logging:
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
    file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"

上述配置将日志输出格式设置为日期时间 [线程名] 日志级别 日志记录器名 - 日志信息

5. 日志输出到多个目的地

在某些场景下,可能需要将日志输出到多个目的地,例如同时输出到控制台和文件。可以通过以下配置实现:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

上述配置将日志同时输出到控制台和文件。

6. 日志输出到远程服务器

在某些分布式系统中,可能需要将日志输出到远程服务器进行集中管理。Logback提供了SocketAppenderSSLSocketAppender等Appender,可以将日志发送到远程服务器。

可以通过以下配置将日志输出到远程服务器:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="SOCKET" class="ch.qos.logback.classic.net.SocketAppender">
        <remoteHost>192.168.1.100</remoteHost>
        <port>4560</port>
        <reconnectionDelay>10000</reconnectionDelay>
        <includeCallerData>true</includeCallerData>
    </appender>

    <root level="INFO">
        <appender-ref ref="SOCKET" />
    </root>
</configuration>

上述配置将日志发送到192.168.1.100服务器的4560端口。

7. 日志输出到数据库

在某些场景下,可能需要将日志输出到数据库中进行存储和分析。Logback提供了DBAppender,可以将日志输出到数据库中。

可以通过以下配置将日志输出到数据库:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
            <driverClass>com.mysql.cj.jdbc.Driver</driverClass>
            <url>jdbc:mysql://localhost:3306/mydb</url>
            <user>root</user>
            <password>password</password>
        </connectionSource>
    </appender>

    <root level="INFO">
        <appender-ref ref="DB" />
    </root>
</configuration>

上述配置将日志输出到MySQL数据库中。

8. 日志输出到Kafka

在某些场景下,可能需要将日志输出到Kafka中进行实时处理和分析。Logback提供了KafkaAppender,可以将日志输出到Kafka中。

可以通过以下配置将日志输出到Kafka:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="KAFKA" class="com.github.danielwegener.logback.kafka.KafkaAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <topic>my-topic</topic>
        <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy" />
        <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" />
        <producerConfig>
            bootstrap.servers=localhost:9092
        </producerConfig>
    </appender>

    <root level="INFO">
        <appender-ref ref="KAFKA" />
    </root>
</configuration>

上述配置将日志输出到Kafka的my-topic主题中。

9. 日志输出到Elasticsearch

在某些场景下,可能需要将日志输出到Elasticsearch中进行集中存储和分析。Logback提供了ElasticsearchAppender,可以将日志输出到Elasticsearch中。

可以通过以下配置将日志输出到Elasticsearch:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="ELASTICSEARCH" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
        <url>http://localhost:9200</url>
        <index>my-index</index>
        <type>log</type>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <root level="INFO">
        <appender-ref ref="ELASTICSEARCH" />
    </root>
</configuration>

上述配置将日志输出到Elasticsearch的my-index索引中。

10. 日志输出到Splunk

在某些场景下,可能需要将日志输出到Splunk中进行集中存储和分析。Logback提供了SplunkAppender,可以将日志输出到Splunk中。

可以通过以下配置将日志输出到Splunk:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="SPLUNK" class="com.splunk.logging.HttpEventCollectorLogbackAppender">
        <url>http://localhost:8088</url>
        <token>my-token</token>
        <disableCertificateValidation>true</disableCertificateValidation>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <root level="INFO">
        <appender-ref ref="SPLUNK" />
    </root>
</configuration>

上述配置将日志输出到Splunk中。

11. 日志输出到Syslog

在某些场景下,可能需要将日志输出到Syslog中进行集中存储和分析。Logback提供了SyslogAppender,可以将日志输出到Syslog中。

可以通过以下配置将日志输出到Syslog:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
        <syslogHost>localhost</syslogHost>
        <port>514</port>
        <facility>USER</facility>
        <suffixPattern>[%thread] %-5level %logger{36} - %msg%n</suffixPattern>
    </appender>

    <root level="INFO">
        <appender-ref ref="SYSLOG" />
    </root>
</configuration>

上述配置将日志输出到Syslog中。

12. 日志输出到Loggly

在某些场景下,可能需要将日志输出到Loggly中进行集中存储和分析。Logback提供了LogglyAppender,可以将日志输出到Loggly中。

可以通过以下配置将日志输出到Loggly:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="LOGGLY" class="com.loggly.logback.LogglyAppender">
        <endpointUrl>https://logs-01.loggly.com/inputs/my-token</endpointUrl>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <root level="INFO">
        <appender-ref ref="LOGGLY" />
    </root>
</configuration>

上述配置将日志输出到Loggly中。

13. 日志输出到Graylog

在某些场景下,可能需要将日志输出到Graylog中进行集中存储和分析。Logback提供了GelfAppender,可以将日志输出到Graylog中。

可以通过以下配置将日志输出到Graylog:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
        <graylogHost>localhost</graylogHost>
        <graylogPort>12201</graylogPort>
        <encoder class="de.siegmar.logbackgelf.GelfEncoder">
            <originHost>my-host</originHost>
            <includeFullMdc>true</includeFullMdc>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="GELF" />
    </root>
</configuration>

上述配置将日志输出到Graylog中。

14. 日志输出到Fluentd

在某些场景下,可能需要将日志输出到Fluentd中进行集中存储和分析。Logback提供了FluentdAppender,可以将日志输出到Fluentd中。

可以通过以下配置将日志输出到Fluentd:

<!-- src/main/resources/logback-spring.xml -->
<configuration>
    <appender name="FLUENTD" class="org.fluentd.logger.FluentLogbackAppender">
        <tag>my-tag</tag>
        <remoteHost>localhost</remoteHost>
        <port>24224</port>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <root level="INFO">
        <appender-ref ref="FLUENTD" />
    </root>
</configuration>

上述配置将日志输出到Fluentd中。

15. 日志输出到Logstash

在某些场景下,可能需要将日志输出到Logstash中进行集中存储和分析。Logback提供了LogstashTcpSocketAppender,可以将日志输出到Logstash中。

可以通过以下配置将日志输出到Logstash:

”`xml

推荐阅读:
  1. spring boot logging 日志设置
  2. Spring boot与数据持久化Spring Data JPA集成实战

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springboot

上一篇:Apache Maven3.6.0怎么下载安装和配置环境

下一篇:Windows系统下如何安装tensorflow

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》