首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在spring-boot-admin中显示日志文件?

在Spring Boot Admin中显示日志文件,可以通过以下步骤实现:

  1. 配置日志文件路径:在Spring Boot应用的配置文件(如application.properties或application.yml)中,添加以下配置项,指定日志文件的路径和名称:logging.file.path=/path/to/logs logging.file.name=myapp.log
  2. 添加依赖:在项目的构建文件(如pom.xml)中,添加Spring Boot Admin的依赖项:<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.5.1</version> </dependency>
  3. 创建Spring Boot Admin配置类:创建一个Java类,用于配置Spring Boot Admin的相关设置。可以使用@EnableAdminServer注解启用Spring Boot Admin,并配置AdminServerPropertieslog-file属性为日志文件的路径和名称:import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration; import org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxProperties; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration; import org.springframework.boot.autoconfigure.jmx.JmxProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.logging.LoggingSystem; import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.core.env.Environment; import org.springframework.core.io.ResourceLoader; import org.springframework.jmx.export.MBeanExporter; import org.springframework.jmx.export.annotation.AnnotationMBeanExporter; import org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler; import org.springframework.jmx.export.assembler.MBeanInfoAssembler; import org.springframework.jmx.export.assembler.SimpleReflectiveMBeanInfoAssembler; import org.springframework.jmx.export.naming.MetadataNamingStrategy; import org.springframework.jmx.export.naming.ObjectNamingStrategy; import org.springframework.jmx.export.naming.SelfNaming; import org.springframework.jmx.support.ConnectorServerFactoryBean; import org.springframework.jmx.support.MBeanServerFactoryBean; import org.springframework.jmx.support.RegistrationPolicy; import org.springframework.util.StringUtils;

import javax.management.MBeanServer;

import javax.management.MalformedObjectNameException;

import javax.management.ObjectName;

import java.io.File;

import java.io.IOException;

import java.lang.management.ManagementFactory;

import java.net.InetAddress;

import java.net.UnknownHostException;

import java.util.HashMap;

import java.util.Map;

import java.util.Properties;

@Configuration

@EnableConfigurationProperties({ JmxProperties.class, SpringApplicationAdminJmxProperties.class })

@ConditionalOnClass({ MBeanServer.class, AnnotationMBeanExporter.class })

@ConditionalOnProperty(prefix = "spring.application.admin", name = "enabled", matchIfMissing = true)

@Import(JmxAutoConfiguration.class)

public class SpringBootAdminConfig {

代码语言:txt
复制
   @Bean
代码语言:txt
复制
   @Primary
代码语言:txt
复制
   @ConditionalOnMissingBean(MBeanServer.class)
代码语言:txt
复制
   public MBeanServer mBeanServer() {
代码语言:txt
复制
       MBeanServerFactoryBean factory = new MBeanServerFactoryBean();
代码语言:txt
复制
       factory.setLocateExistingServerIfPossible(true);
代码语言:txt
复制
       factory.afterPropertiesSet();
代码语言:txt
复制
       return factory.getObject();
代码语言:txt
复制
   }
代码语言:txt
复制
   @Bean
代码语言:txt
复制
   @ConditionalOnMissingBean
代码语言:txt
复制
   public ObjectNamingStrategy objectNamingStrategy() {
代码语言:txt
复制
       MetadataNamingStrategy strategy = new MetadataNamingStrategy(mBeanServer());
代码语言:txt
复制
       strategy.setDefaultDomain("org.springframework.boot");
代码语言:txt
复制
       return strategy;
代码语言:txt
复制
   }
代码语言:txt
复制
   @Bean
代码语言:txt
复制
   @ConditionalOnMissingBean
代码语言:txt
复制
   public MBeanInfoAssembler mBeanInfoAssembler() {
代码语言:txt
复制
       return new SimpleReflectiveMBeanInfoAssembler();
代码语言:txt
复制
   }
代码语言:txt
复制
   @Bean
代码语言:txt
复制
   @ConditionalOnMissingBean
代码语言:txt
复制
   public AnnotationMBeanExporter mbeanExporter(ObjectNamingStrategy namingStrategy,
代码语言:txt
复制
                                                 MBeanInfoAssembler assembler) {
代码语言:txt
复制
       AnnotationMBeanExporter exporter = new AnnotationMBeanExporter();
代码语言:txt
复制
       exporter.setNamingStrategy(namingStrategy);
代码语言:txt
复制
       exporter.setAssembler(assembler);
代码语言:txt
复制
       exporter.setRegistrationPolicy(RegistrationPolicy.IGNORE_EXISTING);
代码语言:txt
复制
       return exporter;
代码语言:txt
复制
   }
代码语言:txt
复制
   @Bean
代码语言:txt
复制
   @ConditionalOnMissingBean
代码语言:txt
复制
   public ConnectorServerFactoryBean connectorServerFactoryBean(JmxProperties properties) {
代码语言:txt
复制
       ConnectorServerFactoryBean factoryBean = new ConnectorServerFactoryBean();
代码语言:txt
复制
       factoryBean.setServiceUrl(properties.getConnector());
代码语言:txt
复制
       return factoryBean;
代码语言:txt
复制
   }
代码语言:txt
复制
   @Bean
代码语言:txt
复制
   @ConditionalOnMissingBean
代码语言:txt
复制
   public SpringApplicationAdminJmxAutoConfiguration springApplicationAdminJmxAutoConfiguration(
代码语言:txt
复制
           JmxProperties jmxProperties, SpringApplicationAdminJmxProperties adminJmxProperties,
代码语言:txt
复制
           ResourceLoader resourceLoader, Environment environment) throws IOException {
代码语言:txt
复制
       SpringApplicationAdminJmxAutoConfiguration configuration = new SpringApplicationAdminJmxAutoConfiguration(
代码语言:txt
复制
               jmxProperties, adminJmxProperties, resourceLoader, environment);
代码语言:txt
复制
       configuration.setLoggingSystem(LoggingSystem.get(environment.getClassLoader()));
代码语言:txt
复制
       return configuration;
代码语言:txt
复制
   }
代码语言:txt
复制
   @Bean
代码语言:txt
复制
   @Order(Ordered.LOWEST_PRECEDENCE)
代码语言:txt
复制
   public SelfNaming selfNaming() {
代码语言:txt
复制
       return new SelfNaming() {
代码语言:txt
复制
           @Override
代码语言:txt
复制
           public ObjectName getObjectName(Object managedBean, String beanKey) throws MalformedObjectNameException {
代码语言:txt
复制
               Map<String, String> properties = new HashMap<>();
代码语言:txt
复制
               properties.put("type", "AdminApplication");
代码语言:txt
复制
               properties.put("name", "Spring Boot Admin");
代码语言:txt
复制
               properties.put("instance", getInstanceId());
代码语言:txt
复制
               properties.put("context", getContextPath());
代码语言:txt
复制
               properties.put("host", getHostName());
代码语言:txt
复制
               properties.put("port", getPort());
代码语言:txt
复制
               return ObjectNameManager.getInstance(properties);
代码语言:txt
复制
           }
代码语言:txt
复制
           private String getInstanceId() {
代码语言:txt
复制
               return System.getProperty("spring.application.admin.instance-id", "unknown");
代码语言:txt
复制
           }
代码语言:txt
复制
           private String getContextPath() {
代码语言:txt
复制
               return System.getProperty("server.servlet.context-path", "/");
代码语言:txt
复制
           }
代码语言:txt
复制
           private String getHostName() {
代码语言:txt
复制
               try {
代码语言:txt
复制
                   return InetAddress.getLocalHost().getHostName();
代码语言:txt
复制
               } catch (UnknownHostException ex) {
代码语言:txt
复制
                   return "unknown";
代码语言:txt
复制
               }
代码语言:txt
复制
           }
代码语言:txt
复制
           private String getPort() {
代码语言:txt
复制
               return System.getProperty("server.port", "unknown");
代码语言:txt
复制
           }
代码语言:txt
复制
       };
代码语言:txt
复制
   }
代码语言:txt
复制
   private static final class ObjectNameManager {
代码语言:txt
复制
       private static final String DOMAIN = "org.springframework.boot";
代码语言:txt
复制
       private static final String KEY_PROPERTY = "key";
代码语言:txt
复制
       private static final String DEFAULT_KEY = "default";
代码语言:txt
复制
       private static ObjectName getInstance(Map<String, String> properties) throws MalformedObjectNameException {
代码语言:txt
复制
           Properties props = new Properties();
代码语言:txt
复制
           props.putAll(properties);
代码语言:txt
复制
           String domain = props.getProperty("domain", DOMAIN);
代码语言:txt
复制
           String key = props.getProperty(KEY_PROPERTY, DEFAULT_KEY);
代码语言:txt
复制
           props.remove("domain");
代码语言:txt
复制
           props.remove(KEY_PROPERTY);
代码语言:txt
复制
           String name = String.format("%s:type=%s,%s", domain, key,
代码语言:txt
复制
                   StringUtils.collectionToDelimitedString(props.entrySet(), ","));
代码语言:txt
复制
           return ObjectName.getInstance(name);
代码语言:txt
复制
       }
代码语言:txt
复制
   }

}

代码语言:txt
复制
  1. 启动Spring Boot Admin服务器:在Spring Boot应用的入口类上添加@EnableAdminServer注解,启用Spring Boot Admin服务器功能:import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import de.codecentric.boot.admin.server.config.EnableAdminServer;

@SpringBootApplication

@EnableAdminServer

public class MyApplication {

代码语言:txt
复制
   public static void main(String[] args) {
代码语言:txt
复制
       SpringApplication.run(MyApplication.class, args);
代码语言:txt
复制
   }

}

代码语言:txt
复制
  1. 访问Spring Boot Admin控制台:启动Spring Boot应用后,访问Spring Boot Admin的控制台页面(默认为http://localhost:8080),可以在应用的详情页面中查看和下载日志文件。

注意:以上步骤是基于Spring Boot Admin 2.5.1版本的配置,具体步骤可能会因版本不同而有所变化。另外,以上配置只适用于显示单个应用的日志文件,如果需要显示多个应用的日志文件,可以参考Spring Boot Admin的文档进行配置。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券