Spring Boot登录指南

登录Spring Boot非常灵活并且易于配置。Spring Boot通过一些简单的配置即可支持各种日志记录提供程序。在本教程中,我们将介绍Spring Boot支持的各种日志记录选项和配置。

目录

1.默认零配置日志记录
2.日志记录日志
3。 Log4j2日志记录
4.更多示例

1.默认零配置日志记录

启用S​​pring Boot活动的日志记录由spring-boot-starter-logging工件确定,它是自动配置的,该自动配置根据提供的配置启用任何受支持的日志记录提供程序(Java Util
Logging
Log4J2Logback)。

如果我们不提供任何特定于日志记录的配置,我们仍将看到打印在“控制台”中的日志。这些是由于Spring Boot使用Logback提供的默认日志支持

Spring Boot的内部日志记录是使用Apache Commons Logging编写的,因此它是一种也是唯一的强制依赖性。直到启动1.x,我们都必须手动导入它。从引导2.x开始,它会进行过渡下载。更确切地说,spring-boot-starter-web取决于spring-boot-starter-logging,这spring-jcl对我们有利。

Spring Boot自动配置提供使用的默认日志记录Logback,这些配置文件中提供了默认配置。

1.1。添加日志语句

要在应用程序代码中添加日志语句org.slf4j.Logger,请org.slf4j.LoggerFactory从和使用SLF4J。它提供了许多有用的日志记录方法,也使日志记录实现与应用程序脱钩。

应用程序
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application
{
    private static final Logger LOGGER=LoggerFactory.getLogger(Application.class);
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        
        LOGGER.info("Simple log statement with inputs {}, {} and {}"123);
    }
}
安慰
2019-07-28 12:16:57.129  INFO 3416 --- [main]
com.how2codex.demo.Application: Simple log statement with inputs 12 and 3

1.2。记录级别

的logback支持ERRORWARNINFODEBUG,或TRACE作为日志记录级别。默认情况下,日志记录级别设置为INFO。这意味着代码> DEBUG和TRACE消息不可见。

要启用调试或跟踪日志记录,我们可以在application.properties文件中设置日志记录级别。另外,我们可以在启动应用程序时在命令行上传递–debug或–trace参数。

组态
# In properties file
debug=true
# In Console
$ java -jar target/my-app-0.0.1-SNAPSHOT.jar --trace

我们也可以将日志记录级别应用于特定的软件包。可以在控制台或application.properties文件中完成。

组态
# In Console
-Dlogging.level.org.springframework=ERROR
-Dlogging.level.com.how2codex=TRACE
# In properties file
logging.level.org.springframework=ERROR
logging.level.com.how2codex=TRACE

如果使用不同的日志级别多次定义了程序包的日志级别,则将使用最低级别。TRACE最低和ERROR最高。

1.3。日志格式

defaults.xml文件中提到了默认的日志语句格式。

defaults.xml
<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}}"/>

输出以下信息。

  • 日期和时间:毫秒精度,易于排序。
  • 日志级别ERRORWARNINFODEBUG,或TRACE
  • 进程ID。
  • 一个---分离器来区分实际日志消息的开始。
  • 线程名称:用方括号括起来(对于控制台输出可能会被截断)。
  • 记录器名称:这通常是源类名称(通常缩写)。
  • 日志消息。

自定义日志格式,使用logging.pattern.consolelogging.pattern.file属性。

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

1.4。记录到文件

默认情况下,spring boot日志仅记录到控制台。如果要启用文件记录,可以使用简单属性logging.file或轻松进行logging.path

使用时logging.path,它将创建一个spring.log在提到的包中命名的文件。

application.properties
# Output to a temp_folder/file
logging.file=c:/temp/application.log
#logging.path=/my-folder/
# Logging pattern for file
logging.pattern.file= %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%

2。 Logback日志记录

对于大多数用例,默认日志记录已经足够了。但是有时在企业应用程序中,我们需要对具有其他复杂需求的日志进行更好的控制。在那种情况下,具有专用的日志记录配置是合适的。

默认情况下,Spring Boot使用logback,因此要自定义其行为,我们只需要在classpath中添加logback.xml并定义该文件的自定义即可。

logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_LOCATION" value="c:/temp" />
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <File>{LOG_LOCATION}/mylog.log</File>
        <encoder>
             <pattern>%d{yyyy-MM-dd HH:mm:ss} - %logger{36} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_LOCATION}/archived/mylog-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
    <!-- Application logs at trace level -->
    <logger name="com.how2codex" level="trace" additivity="false">
        <appender-ref ref="RollingFile" />
        <appender-ref ref="Console" />
    </logger>
</configuration>

3。 Log4j2记录

步骤1:排除logback,并包括log4j2

如前所述,spring boot使用logback作为默认值。因此,如果必须使用任何其他日志记录框架(例如)log4j2,则必须从应用程序的类路径中排除logback。另外,将spring-boot-starter-log4j2添加到classpath。

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

步骤2:添加log4j2配置文件

现在,在类路径(通常在资源文件夹中)中添加特定于log4j2的配置文件。可以将其命名为以下任意一种:

  • log4j2-spring.xml
  • log4j2.xml

如果我们在任何其他文件(例如log4j2.properties,applogs.xml等)中都有日志记录配置,则可以使用logging.fileproperty来指定它的路径application.properties文件。

log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <Properties>
        <Property name="LOG_PATTERN">%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %p %m%n</Property>
        <Property name="APP_LOG_ROOT">c:/temp</Property>
    </Properties>
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="${LOG_PATTERN}" />
        </Console>
 
        <RollingFile name="file"
            fileName="${APP_LOG_ROOT}/SpringBoot2App/application.log"
            filePattern="${APP_LOG_ROOT}/SpringBoot2App/application-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="${LOG_PATTERN}" />
            <Policies>
                <SizeBasedTriggeringPolicy size="19500KB" />
            </Policies>
            <DefaultRolloverStrategy max="1" />
        </RollingFile>
 
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="console" />
            <AppenderRef ref="file" />
        </Root>
    </Loggers>
</Configuration>

步骤3:有或没有Slf4j

默认情况下,如果您使用SLF4J记录器类即org.slf4j.Loggerorg.slf4j.LoggerFactory,则无需在应用程序代码中进行任何更改,并且所有log语句将继续在目标附加程序中打印。

如果您打算仅使用log4j2特定的类,请使用org.apache.logging.log4j.Loggerorg.apache.logging.log4j.LogManager

我将建议使用SLF4J记录器类。

SLF4J记录器类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SpringBootApplication
public class Application
{
    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);
    public static void main(String[] args) {       
        SpringApplication.run(Application.class, args);
        LOGGER.info("Simple log statement with inputs {}, {} and {}"123);
    }
}
LOG4J2记录器类
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@SpringBootApplication
public class Application
{
    private static Logger LOGGER = LogManager.getLogger(Application.class);
    public static void main(String[] args) {       
        SpringApplication.run(Application.class, args);
        LOGGER.info("Simple log statement with inputs 1, 2 and 3");
    }
}

4.有关Spring Boot日志记录的更多示例

  1. Spring Boot 2 log4j2.xml示例
  2. Spring Boot 2 log4j2.properties示例
  3. 使用application.yml进行Spring Boot日志记录
  4. 使用application.properties进行Spring Boot日志记录
  5. Spring Boot嵌入式服务器的Tomcat,Jetty和Undertow日志配置
  6. 使用AspectJ AOP进行Spring Boot性能日志
  7. 使用Lombok记录Spring Boot
  8. Spring Boot多个日志文件示例
  9. Spring Boot控制台日志记录配置示例
  10. Spring Boot配置文件特定的日志记录示例

请把您与spring boot中的日志记录配置有关的问题交给我。

saigon has written 1445 articles

Leave a Reply