基于 SringBoot 项目
在 resources
目录下创建 logback-spring.xml
文件,并填写以下内容,请根据实际修改:
<configuration scan="true" scanPeriod="10 seconds" debug="false">
<springProperty name="application" scope="context" source="spring.application.name" />
<springProperty name="port" scope="context" source="server.port"/>
<contextName>logbackcontextName>
<property name="log.path" value="data/logs/${application}/${port}" />
<define name="hostname" class="ch.qos.logback.core.property.CanonicalHostNamePropertyDefiner" />
<property name="CONSOLE_LOG_PATTERN"
value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%highlight(%-5level)] [${hostname}:${port}] [%cyan(%logger{50})] [%msg]%n" />
<property name="FILE_LOG_PATTERN"
value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] [${hostname}:${port}] [%logger{50}] [%msg]%n" />
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debuglevel>
filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}Pattern>
<charset>UTF-8charset>
encoder>
appender>
<appender name="DEBUG_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_debug.logfile>
<encoder>
<Pattern>${FILE_LOG_PATTERN}Pattern>
<charset>UTF-8charset>
encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd_HH-mm}.%i.log
fileNamePattern>
<maxFileSize>1MBmaxFileSize>
<maxHistory>180maxHistory>
<totalSizeCap>20GBtotalSizeCap>
rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>debuglevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
<appender name="INFO_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_info.logfile>
<encoder>
<Pattern>${FILE_LOG_PATTERN}Pattern>
<charset>UTF-8charset>
encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log
fileNamePattern>
<maxFileSize>1MBmaxFileSize>
<maxHistory>180maxHistory>
<totalSizeCap>20GBtotalSizeCap>
rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>infolevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
<appender name="WARN_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_warn.logfile>
<encoder>
<Pattern>${FILE_LOG_PATTERN}Pattern>
<charset>UTF-8charset>
encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log
fileNamePattern>
<maxFileSize>1MBmaxFileSize>
<maxHistory>180maxHistory>
<totalSizeCap>20GBtotalSizeCap>
rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warnlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
<appender name="ERROR_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_error.logfile>
<encoder>
<Pattern>${FILE_LOG_PATTERN}Pattern>
<charset>UTF-8charset>
encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log
fileNamePattern>
<maxFileSize>1MBmaxFileSize>
<maxHistory>180maxHistory>
<totalSizeCap>20GBtotalSizeCap>
rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERRORlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="WARN_FILE" />
<appender-ref ref="ERROR_FILE" />
root>
<logger
name="com.pikaiqu.logbackdemo.LogbackdemoApplicationTests"
level="debug" additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="INFO_FILE" />
logger>
<springProfile name="prod">
<root level="info">
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
<appender-ref ref="WARN_FILE" />
root>
springProfile>
<springProfile name="dev">
<root level="info">
<appender-ref ref="STDOUT" />
root>
springProfile>
configuration>
日志的输出路径为:data/logs/${application}/${port}
,其中 application
为应用名称,port
为应用的端口号,需要在项目的配置文件中进行配置,否则会报错,日志的输出如下:
/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:53270,suspend=y,server=n -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dmanagement.endpoints.jmx.exposure.include=* -javaagent:/Users/zjc/Library/Caches/JetBrains/IntelliJIdea2024.2/captureAgent/debugger-agent.jar -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dfile.encoding=UTF-8 -classpath /Users/zjc/spring-initializr/target/classes:/Users/zjc/.m2/repository/org/springframework/boot/spring-boot-starter-web/3.3.5/spring-boot-starter-web-3.3.5.jar:/Users/zjc/.m2/repository/org/springframework/boot/spring-boot-starter/3.3.5/spring-boot-starter-3.3.5.jar:/Users/zjc/.m2/repository/org/springframework/boot/spring-boot-starter-logging/3.3.5/spring-boot-starter-logging-3.3.5.jar:/Users/zjc/.m2/repository/ch/qos/logback/logback-classic/1.5.11/logback-classic-1.5.11.jar:/Users/zjc/.m2/repository/ch/qos/logback/logback-core/1.5.11/logback-core-1.5.11.jar:/Users/zjc/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.23.1/log4j-to-slf4j-2.23.1.jar:/Users/zjc/.m2/repository/org/apache/logging/log4j/log4j-api/2.23.1/log4j-api-2.23.1.jar:/Users/zjc/.m2/repository/org/slf4j/jul-to-slf4j/2.0.16/jul-to-slf4j-2.0.16.jar:/Users/zjc/.m2/repository/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar:/Users/zjc/.m2/repository/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar:/Users/zjc/.m2/repository/org/springframework/boot/spring-boot-starter-json/3.3.5/spring-boot-starter-json-3.3.5.jar:/Users/zjc/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.17.2/jackson-databind-2.17.2.jar:/Users/zjc/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.17.2/jackson-annotations-2.17.2.jar:/Users/zjc/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.17.2/jackson-core-2.17.2.jar:/Users/zjc/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.17.2/jackson-datatype-jdk8-2.17.2.jar:/Users/zjc/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.17.2/jackson-datatype-jsr310-2.17.2.jar:/Users/zjc/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.17.2/jackson-module-parameter-names-2.17.2.jar:/Users/zjc/.m2/repository/org/springframework/boot/spring-boot-starter-tomcat/3.3.5/spring-boot-starter-tomcat-3.3.5.jar:/Users/zjc/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/10.1.31/tomcat-embed-core-10.1.31.jar:/Users/zjc/.m2/repository/org/apache/tomcat/embed/tomcat-embed-el/10.1.31/tomcat-embed-el-10.1.31.jar:/Users/zjc/.m2/repository/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.31/tomcat-embed-websocket-10.1.31.jar:/Users/zjc/.m2/repository/org/springframework/spring-web/6.1.14/spring-web-6.1.14.jar:/Users/zjc/.m2/repository/org/springframework/spring-beans/6.1.14/spring-beans-6.1.14.jar:/Users/zjc/.m2/repository/io/micrometer/micrometer-observation/1.13.6/micrometer-observation-1.13.6.jar:/Users/zjc/.m2/repository/io/micrometer/micrometer-commons/1.13.6/micrometer-commons-1.13.6.jar:/Users/zjc/.m2/repository/org/springframework/spring-webmvc/6.1.14/spring-webmvc-6.1.14.jar:/Users/zjc/.m2/repository/org/springframework/spring-context/6.1.14/spring-context-6.1.14.jar:/Users/zjc/.m2/repository/org/springframework/spring-expression/6.1.14/spring-expression-6.1.14.jar:/Users/zjc/.m2/repository/org/springframework/boot/spring-boot-starter-aop/3.3.5/spring-boot-starter-aop-3.3.5.jar:/Users/zjc/.m2/repository/org/springframework/spring-aop/6.1.14/spring-aop-6.1.14.jar:/Users/zjc/.m2/repository/org/aspectj/aspectjweaver/1.9.22.1/aspectjweaver-1.9.22.1.jar:/Users/zjc/.m2/repository/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar:/Users/zjc/.m2/repository/org/springframework/spring-core/6.1.14/spring-core-6.1.14.jar:/Users/zjc/.m2/repository/org/springframework/spring-jcl/6.1.14/spring-jcl-6.1.14.jar:/Users/zjc/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/3.3.5/spring-boot-autoconfigure-3.3.5.jar:/Users/zjc/.m2/repository/org/springframework/boot/spring-boot/3.3.5/spring-boot-3.3.5.jar:/Users/zjc/.m2/repository/org/springframework/boot/spring-boot-configuration-processor/3.3.5/spring-boot-configuration-processor-3.3.5.jar:/Users/zjc/.m2/repository/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar:/Users/zjc/.m2/repository/com/alibaba/fastjson2/fastjson2/2.0.53/fastjson2-2.0.53.jar:/Users/zjc/.m2/repository/org/springframework/boot/spring-boot-devtools/3.3.5/spring-boot-devtools-3.3.5.jar:/Users/zjc/.m2/repository/org/springframework/boot/spring-boot-starter-thymeleaf/3.3.5/spring-boot-starter-thymeleaf-3.3.5.jar:/Users/zjc/.m2/repository/org/thymeleaf/thymeleaf-spring6/3.1.2.RELEASE/thymeleaf-spring6-3.1.2.RELEASE.jar:/Users/zjc/.m2/repository/org/thymeleaf/thymeleaf/3.1.2.RELEASE/thymeleaf-3.1.2.RELEASE.jar:/Users/zjc/.m2/repository/org/attoparser/attoparser/2.0.7.RELEASE/attoparser-2.0.7.RELEASE.jar:/Users/zjc/.m2/repository/org/unbescape/unbescape/1.1.6.RELEASE/unbescape-1.1.6.RELEASE.jar:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar com.uhaiin.Application
Connected to the target VM, address: '127.0.0.1:53270', transport: 'socket'
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.3.5)
[2024-12-10 21:43:56.318] [restartedMain] [INFO ] [192.168.1.5:8000] [com.uhaiin.Application] [Starting Application using Java 17.0.12 with PID 61188 (/Users/zjc/spring-initializr/target/classes started by zjc in /Users/zjc/spring-initializr)]
[2024-12-10 21:43:56.320] [restartedMain] [INFO ] [192.168.1.5:8000] [com.uhaiin.Application] [The following 3 profiles are active: "pub", "thymeleaf", "dev"]
[2024-12-10 21:43:56.351] [restartedMain] [INFO ] [192.168.1.5:8000] [o.s.b.d.env.DevToolsPropertyDefaultsPostProcessor] [Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable]
[2024-12-10 21:43:56.351] [restartedMain] [INFO ] [192.168.1.5:8000] [o.s.b.d.env.DevToolsPropertyDefaultsPostProcessor] [For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG']
[2024-12-10 21:43:57.125] [restartedMain] [INFO ] [192.168.1.5:8000] [o.s.boot.web.embedded.tomcat.TomcatWebServer] [Tomcat initialized with port 8000 (http)]
[2024-12-10 21:43:57.132] [restartedMain] [INFO ] [192.168.1.5:8000] [org.apache.coyote.http11.Http11NioProtocol] [Initializing ProtocolHandler ["http-nio-8000"]]
[2024-12-10 21:43:57.135] [restartedMain] [INFO ] [192.168.1.5:8000] [org.apache.catalina.core.StandardService] [Starting service [Tomcat]]
[2024-12-10 21:43:57.135] [restartedMain] [INFO ] [192.168.1.5:8000] [org.apache.catalina.core.StandardEngine] [Starting Servlet engine: [Apache Tomcat/10.1.31]]
[2024-12-10 21:43:57.167] [restartedMain] [INFO ] [192.168.1.5:8000] [o.a.c.core.ContainerBase.[Tomcat].[localhost].[/]] [Initializing Spring embedded WebApplicationContext]
[2024-12-10 21:43:57.167] [restartedMain] [INFO ] [192.168.1.5:8000] [o.s.b.w.s.c.ServletWebServerApplicationContext] [Root WebApplicationContext: initialization completed in 816 ms]
[2024-12-10 21:43:57.292] [restartedMain] [INFO ] [192.168.1.5:8000] [o.s.b.a.web.servlet.WelcomePageHandlerMapping] [Adding welcome page template: index]
[2024-12-10 21:43:57.559] [restartedMain] [INFO ] [192.168.1.5:8000] [o.s.b.d.autoconfigure.OptionalLiveReloadServer] [LiveReload server is running on port 35729]
[2024-12-10 21:43:57.571] [restartedMain] [INFO ] [192.168.1.5:8000] [org.apache.coyote.http11.Http11NioProtocol] [Starting ProtocolHandler ["http-nio-8000"]]
[2024-12-10 21:43:57.588] [restartedMain] [INFO ] [192.168.1.5:8000] [o.s.boot.web.embedded.tomcat.TomcatWebServer] [Tomcat started on port 8000 (http) with context path '/']
[2024-12-10 21:43:57.595] [restartedMain] [INFO ] [192.168.1.5:8000] [com.uhaiin.Application] [Started Application in 1.674 seconds (process running for 2.182)]
同时日志也会保存到本地,文件目录结构如下:
├── data
│ └── logs
│ └── spring-initializr
│ └── 8000
│ ├── log_debug.log
│ ├── log_error.log
│ ├── log_info.log
│ └── log_warn.log