转载于:https://www.jianshu.com/p/af9738634a21
Spring Boot 的 Actuator 提供了很多生产级的特性,比如监控和度量Spring Boot 应用程序。Actuator 的这些特性可以通过众多 REST 接口、远程 shell 和 JMX 获得。
一、Actuator 的 REST 接口
Spring Boot Actuator 的关键特性是在应用程序里提供众多 Web 接口,通过它们了解应用程序运行时的内部状况。Actuator 提供了 13 个接口,可以分为三大类:配置接口、度量接口和其它接口,具体如下表所示。
HTTP 方法 | 路径 | 描述 |
---|---|---|
GET | /autoconfig | 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过 |
GET | /configprops | 描述配置属性(包含默认值)如何注入Bean |
GET | /beans | 描述应用程序上下文里全部的Bean,以及它们的关系 |
GET | /dump | 获取线程活动的快照 |
GET | /env | 获取全部环境属性 |
GET | /env/{name} | 根据名称获取特定的环境属性值 |
GET | /health | 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供 |
GET | /info | 获取应用程序的定制信息,这些信息由info打头的属性提供 |
GET | /mappings | 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系 |
GET | /metrics | 报告各种应用程序度量信息,比如内存用量和HTTP请求计数 |
GET | /metrics/{name} | 报告指定名称的应用程序度量值 |
POST | /shutdown | 关闭应用程序,要求endpoints.shutdown.enabled设置为true |
GET | /trace | 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等) |
要启用 Actuator 的端点,只要在项目中引入 Actuator 的依赖即可。对于 Maven 依赖,引入的依赖是这样的:
<dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
1. 查看配置明细
Actuator 有一些接口不仅可以显示组件映射关系,还可以告诉你自动配置在配置 Spring 应用程序上下文时做了哪些决策。
1.1 获得 Bean 装配报告
要了解应用程序中 Spring 上下文的情况,最重要的接口就是 /beans
。它会返回一个 JSON 文档,描述上下文里每个 bean 的情况,包括其 Java 类型以及注入的其它 bean。返回的信息如下所示:
[
{
"context": "application",
"parent": null,
"beans": [ { "bean": "demoApplication", "aliases": [], "scope": "singleton", "type": "com.example.DemoApplication$$EnhancerBySpringCGLIB$$88686e04", "resource": "null", "dependencies": [] }, { "bean": "org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory", "aliases": [], "scope": "singleton", "type": "org.springframework.core.type.classreading.CachingMetadataReaderFactory", "resource": "null", "dependencies": [] } ] } ]
所有的 Bean 条目都有五类信息:
- bean:Spring 应用程序上下文中的 Bean 名称或 ID。
- resource:.class 文件的物理位置,通常是一个 URL,指向构建出的 JAR 文件。这会随着应用程序的构建和运行方式发生变化。
- dependencies:当前 Bean 注入的 Bean ID 列表。
- scope:Bean 的作用域(通常是单例,这也是默认作用域)。
- type:Bean 的 Java 类型。
1.2 详解自动配置
/autoconfig
接口能告诉你为什么会有这个 bean ,或者为什么没有这个 bean。
{
"positiveMatches": {
"AuditAutoConfiguration#auditListener": [
{
"condition": "OnBeanCondition",
"message": "@ConditionalOnMissingBean (types: org.springframework.boot.actuate.audit.listener.AbstractAuditListener; SearchStrategy: all) did not find any beans" } ], "MultipartAutoConfiguration#multipartConfigElement": [ { "condition": "OnBeanCondition", "message": "@ConditionalOnMissingBean (types: javax.servlet.MultipartConfigElement; SearchStrategy: all) did not find any beans" } ] }, "negativeMatches": { "AuditAutoConfiguration#authenticationAuditListener": { "notMatched": [ { "condition": "OnClassCondition", "message": "@ConditionalOnClass did not find required class 'org.springframework.security.authentication.event.AbstractAuthenticationEvent'" } ], "matched": [] }, "AuditAutoConfiguration#authorizationAuditListener": { "notMatched": [ { "condition": "OnClassCondition", "message": "@ConditionalOnClass did not find required class 'org.springframework.security.access.event.AbstractAuthorizationEvent'" } ], "matched": [] } } }
1.3 查看配置属性
/env
接口会生成应用程序可用的所有环境属性的列表,无论这些属性是否用到。这其中包括环境变量、JVM 属性、命令行参数,以及 application.properties 或 application.yml 文件提供的属性。
{
"profiles": [],
"server.ports": {
"local.server.port": 8080
},
"servletContextInitParams": {}, "systemProperties": { "java.runtime.name": "Java(TM) SE Runtime Environment", "spring.output.ansi.enabled": "always", "sun.boot.library.path": "/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib", "java.vm.version": "25.121-b13", "gopherProxySet": "false", "java.vm.vendor": "Oracle Corporation", "java.vendor.url": "http://java.oracle.com/", "path.separator": ":", "idea.launcher.port": "7532", "java.vm.name": "Java HotSpot(TM) 64-Bit Server VM", "file.encoding.pkg": "sun.io", "user.country": "CN", "sun.java.launcher": "SUN_STANDARD", "sun.os.patch.level": "unknown", "PID": "2716", "java.vm.specification.name": "Java Virtual Machine Specification", "user.dir": "/Users/FlySheep/FlySheep/Code/ServerCode/SpringBoot_Demo/demo", "java.runtime.version": "1.8.0_121-b13", "java.awt.graphicsenv": "sun.awt.CGraphicsEnvironment", "org.jboss.logging.provider": "slf4j", "java.endorsed.dirs": "/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/endorsed", "os.arch": "x86_64", "visualvm.id": "11136812717769", "java.io.tmpdir": "/var/folders/d6/zn9yrwns46j4pwbl1_mv_6hw0000gn/T/", "line.separator": "\n", "java.vm.specification.vendor": "Oracle Corporation", "os.name": "Mac OS X", "sun.jnu.encoding": "UTF-8", "spring.beaninfo.ignore": "true", "java.library.path": "/Users/FlySheep/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.", "java.specification.name": "Java Platform API Specification", "java.class.version": "52.0", "sun.management.compiler": "HotSpot 64-Bit Tiered Compilers", "os.version": "10.11", "user.home": "/Users/FlySheep", "catalina.useNaming": "false", "user.timezone": "Asia/Shanghai", "java.awt.printerjob": "sun.lwawt.macosx.CPrinterJob", "file.encoding": "UTF-8", "idea.launcher.bin.path": "/Applications/IntelliJ IDEA.app/Contents/bin", "java.specification.version": "1.8", "catalina.home": "/private/var/folders/d6/zn9yrwns46j4pwbl1_mv_6hw0000gn/T/tomcat.6698906163877756728.8080", "java.class.path": "/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/tools.jar:/Users/FlySheep/FlySheep/Code/ServerCode/SpringBoot_Demo/demo/target/classes:/Users/FlySheep/.m2/repository/org/springframework/boot/spring-boot-starter-web/1.5.2.RELEASE/spring-boot-starter-web-1.5.2.RELEASE.jar:/Users/FlySheep/.m2/repository/org/springframework/boot/spring-boot-starter/1.5.2.RELEASE/spring-boot-starter-1.5.2.RELEASE.jar:/Users/FlySheep/.m2/repository/org/springframework/boot/spring-boot/1.5.2.RELEASE/spring-boot-1.5.2.RELEASE.jar:/Users/FlySheep/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/1.5.2.RELEASE/spring-boot-autoconfigure-1.5.2.RELEASE.jar:/Users/FlySheep/.m2/repository/org/springframework/boot/spring-boot-starter-logging/1.5.2.RELEASE/spring-boot-starter-logging-1.5.2.RELEASE.jar:/Users/FlySheep/.m2/repository/ch/qos/logback/logback-classic/1.1.11/logback-classic-1.1.11.jar:/Users/FlySheep/.m2/repository/ch/qos/logback/logback-core/1.1.11/logback-core-1.1.11.jar:/Users/FlySheep/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.24/jcl-over-slf4j-1.7.24.jar:/Users/FlySheep/.m2/repository/org/slf4j/jul-to-slf4j/1.7.24/jul-to-slf4j-1.7.24.jar:/Users/FlySheep/.m2/repository/org/slf4j/log4j-over-slf4j/1.7.24/log4j-over-slf4j-1.7.24.jar:/Users/FlySheep/.m2/repository/org/yaml/snakeyaml/1.17/snakeyaml-1.17.jar:/Users/FlySheep/.m2/repository/org/springframework/boot/spring-boot-starter-tomcat/1.5.2.RELEASE/spring-boot-starter-tomcat-1.5.2.RELEASE.jar:/Users/FlySheep/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/8.5.11/tomcat-embed-core-8.5.11.jar:/Users/FlySheep/.m2/repository/org/apache/tomcat/embed/tomcat-embed-el/8.5.11/tomcat-embed-el-8.5.11.jar:/Users/FlySheep/.m2/repository/org/apache/tomcat/embed/tomcat-embed-websocket/8.5.11/tomcat-embed-websocket-8.5.11.jar:/Users/FlySheep/.m2/repository/org/hibernate/hibernate-validator/5.3.4.Final/hibernate-validator-5.3.4.Final.jar:/Users/FlySheep/.m2/repository/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.jar:/Users/FlySheep/.m2/repository/org/jboss/logging/jboss-logging/3.3.0.Final/jboss-logging-3.3.0.Final.jar:/Users/FlySheep/.m2/repository/com/fasterxml/classmate/1.3.3/classmate-1.3.3.jar:/Users/FlySheep/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.8.7/jackson-databind-2.8.7.jar:/Users/FlySheep/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.8.0/jackson-annotations-2.8.0.jar:/Users/FlySheep/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.8.7/jackson-core-2.8.7.jar:/Users/FlySheep/.m2/repository/org/springframework/spring-web/4.3.7.RELEASE/spring-web-4.3.7.RELEASE.jar:/Users/FlySheep/.m2/repository/org/springframework/spring-aop/4.3.7.RELEASE/spring-aop-4.3.7.RELEASE.jar:/Users/FlySheep/.m2/repository/org/springframework/spring-beans/4.3.7.RELEASE/spring-beans-4.3.7.RELEASE.jar:/Users/FlySheep/.m2/repository/org/springframework/spring-context/4.3.7.RELEASE/spring-context-4.3.7.RELEASE.jar:/Users/FlySheep/.m2/repository/org/springframework/spring-webmvc/4.3.7.RELEASE/spring-webmvc-4.3.7.RELEASE.jar:/Users/FlySheep/.m2/repository/org/springframework/spring-expression/4.3.7.RELEASE/spring-expression-4.3.7.RELEASE.jar:/Users/FlySheep/.m2/repository/org/springframework/boot/spring-boot-starter-actuator/1.5.2.RELEASE/spring-boot-starter-actuator-1.5.2.RELEASE.jar:/Users/FlySheep/.m2/repository/org/springframework/boot/spring-boot-actuator/1.5.2.RELEASE/spring-boot-actuator-1.5.2.RELEASE.jar:/Users/FlySheep/.m2/repository/org/slf4j/slf4j-api/1.7.24/slf4j-api-1.7.24.jar:/Users/FlySheep/.m2/repository/org/springframework/spring-core/4.3.7.RELEASE/spring-core-4.3.7.RELEASE.jar:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar", "user.name": "FlySheep", "java.vm.specification.version": "1.8", "sun.java.command": "com.intellij.rt.execution.application.AppMain com.example.DemoApplication", "java.home": "/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre", "sun.arch.data.model": "64", "user.language": "zh", "java.specification.vendor": "Oracle Corporation", "awt.toolkit": "sun.lwawt.macosx.LWCToolkit", "java.vm.info": "mixed mode", "java.version": "1.8.0_121", "java.ext.dirs": "/Users/FlySheep/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java", "sun.boot.class.path": "/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/classes", "java.awt.headless": "true", "java.vendor": "Oracle Corporation", "catalina.base": "/private/var/folders/d6/zn9yrwns46j4pwbl1_mv_6hw0000gn/T/tomcat.6698906163877756728.8080", "file.separator": "/", "java.vendor.url.bug": "http://bugreport.sun.com/bugreport/", "sun.io.unicode.encoding": "UnicodeBig", "sun.cpu.endian": "little", "sun.cpu.isalist": "" }, "systemEnvironment": { "PATH": "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin:/usr/local/mysql/bin:/Users/FlySheep/FlySheep/JavaTools/apache-maven-3.3.9/bin/bin", "SHELL": "/bin/zsh", "PAGER": "less", "LSCOLORS": "Gxfxcxdxbxegedabagacad", "OLDPWD": "/Applications/IntelliJ IDEA.app/Contents/bin", "USER": "FlySheep", "VERSIONER_PYTHON_PREFER_32_BIT": "no", "ZSH": "/Users/FlySheep/.oh-my-zsh", "TMPDIR": "/var/folders/d6/zn9yrwns46j4pwbl1_mv_6hw0000gn/T/", "SSH_AUTH_SOCK": "/private/tmp/com.apple.launchd.vZEKsGdZ1T/Listeners", "JAVA_MAIN_CLASS_2716": "com.intellij.rt.execution.application.AppMain", "XPC_FLAGS": "0x0", "VERSIONER_PYTHON_VERSION": "2.7", "__CF_USER_TEXT_ENCODING": "0x1F5:0x19:0x34", "Apple_PubSub_Socket_Render": "/private/tmp/com.apple.launchd.5VgRuDCQ5D/Render", "LOGNAME": "FlySheep", "LESS": "-R", "LC_CTYPE": "", "PWD": "/Users/FlySheep/FlySheep/Code/ServerCode/SpringBoot_Demo/demo", "XPC_SERVICE_NAME": "com.jetbrains.intellij.136992", "HOME": "/Users/FlySheep" }, "applicationConfig: [classpath:/application.properties]": { "management.security.enabled": "false" } }
基本上,任何能给Spring Boot 应用程序提供属性的属性源都会列在 /env 的结果里,同时会显示具体的属性。
为了避免敏感信息暴露到 /env 里,所有名为password、secret、key(或者名字中最后一段是这些)的属性在 /env 里都会加上“*”。举个例子,如果有一个属性名字是database.password,那么它在/env中的显示效果是这样的:
"database.password":"******"
/env 接口还能用来获取单个属性的值,只需要在请求时在 /env 后加上属性名即可。
1.4 查看属性的使用方法
/configprops 接口会生成一个报告,说明属性如何进行设置(注入或其他方式)。
{
"endpoints-org.springframework.boot.actuate.endpoint.EndpointProperties": {
"prefix": "endpoints",
"properties": {
"enabled": true, "sensitive": null } }, "management.info-org.springframework.boot.actuate.autoconfigure.InfoContributorProperties": { "prefix": "management.info", "properties": { "git": { "mode": "SIMPLE" } } }, "metricsEndpoint": { "prefix": "endpoints.metrics", "properties": { "id": "metrics", "sensitive": true, "enabled": true } }, "spring.jackson-org.springframework.boot.autoconfigure.jackson.JacksonProperties": { "prefix": "spring.jackson", "properties": { "propertyNamingStrategy": null, "defaultPropertyInclusion": null, "dateFormat": null, "timeZone": null, "locale": null, "jodaDateTimeFormat": null } }, "heapdumpMvcEndpoint": { "prefix": "endpoints.heapdump", "properties": { "path": "/heapdump", "sensitive": true, "enabled": true } }, "endpoints.cors-org.springframework.boot.actuate.autoconfigure.EndpointCorsProperties": { "prefix": "endpoints.cors", "properties": { "allowedOrigins": [], "maxAge": 1800, "exposedHeaders": [], "allowedHeaders": [], "allowedMethods": [], "allowCredentials": null } }, "environmentMvcEndpoint": { "prefix": "endpoints.env", "properties": { "path": "/env" } }, "environmentEndpoint": { "prefix": "endpoints.env", "properties": { "id": "env", "sensitive": true, "enabled": true } }, "spring.http.multipart-org.springframework.boot.autoconfigure.web.MultipartProperties": { "prefix": "spring.http.multipart", "properties": { "maxRequestSize": "10MB", "fileSizeThreshold": "0", "location": null, "maxFileSize": "1MB", "enabled": true, "resolveLazily": false } }, "spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties": { "prefix": "spring.info", "properties": { "build": { "location": {} }, "git": { "location": {} } } }, "auditEventsEndpoint": { "prefix": "endpoints.auditevents", "properties": { "enabled": true } }, "traceEndpoint": { "prefix": "endpoints.trace", "properties": { "id": "trace", "sensitive": true, "enabled": true } }, "metricsMvcEndpoint": { "prefix": "endpoints.metrics", "properties": { "path": "/metrics" } }, "infoEndpoint": { "prefix": "endpoints.info", "properties": { "id": "info", "sensitive": false, "enabled": true } }, "auditEventMvcEndpoint": { "prefix": "endpoints.auditevents", "properties": { "path": "/auditevents", "sensitive": true, "enabled": true } }, "management.trace-org.springframework.boot.actuate.trace.TraceProperties": { "prefix": "management.trace", "properties": { "include": [ "COOKIES", "REQUEST_HEADERS", "RESPONSE_HEADERS", "ERRORS" ] } }, "spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties": { "prefix": "spring.resources", "properties": { "cachePeriod": null, "addMappings": true, "chain": { "cache": true, "htmlApplicationCache": false, "gzipped": false, "strategy": { "fixed": { "enabled": false, "paths": [ "/**" ], "version": null }, "content": { "enabled": false, "paths": [ "/**" ] } } }, "staticLocations": [ "/", "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" ] } }, "management.health.status-org.springframework.boot.actuate.autoconfigure.HealthIndicatorProperties": { "prefix": "management.health.status", "properties": { "order": null } }, "healthMvcEndpoint": { "prefix": "endpoints.health", "properties": { "path": "/health" } }, "serverProperties": { "prefix": "server", "properties": { "address": null, "maxHttpPostSize": 0, "undertow": { "maxHttpPostSize": 0, "bufferSize": null, "buffersPerRegion": null, "ioThreads": null, "workerThreads": null, "directBuffers": null, "accesslog": { "enabled": null, "pattern": "common", "prefix": "access_log.", "suffix": "log", "dir": "/Users/FlySheep/FlySheep/Code/ServerCode/SpringBoot_Demo/demo/logs", "rotate": true } }, "tomcat": { "accesslog": { "enabled": false, "pattern": "common", "directory": "logs", "prefix": "access_log", "suffix":