WhatsApp网页版登录WhatsApp网页版登录

WhatsApp中文版

控制台log文件设置

如果你是一个后端,那你就应该知道Spring Boot Actuator 绝对是项目上线前后不可或缺的好帮手。它就像是在你代码旁边放了一个“智能体检仪”,可以帮你随时看看项目的健康状况、内存消耗、线程情况,甚至还能追踪日志情况,关键是——用起来还特别简单。

今天咱就从技术的角度WhatsApp网页版,聊聊怎么用 Actuator 和 Spring Boot Admin 做指标监控,以及怎么用 Logback 管好日志这些事儿。

Actuator 是个什么东东?

Actuator 其实是 Spring Boot 官方提供的一个轻量级监控组件,专门用来帮你在不写额外代码的情况下,获取应用运行时的各种指标数据。比如说你想知道当前应用的健康状况,或者 JVM 的内存使用情况,只要一行配置就能搞定。

先别急着夸它,直接上代码感受一下它的存在感:


<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-actuatorartifactId>
dependency>

接着我们要在配置文件里放开访问权限,不然你只能看到 /health 和 /info 这两个最基础的端点。

# 开启所有监控端点
management.endpoints.web.exposure.include=*

启动服务后,打开浏览器访问 http://localhost:8080/actuator,你会看到一串 JSON 格式的数据,都是当前项目的一些运行时信息。

比如你访问 /actuator/metrics,就能看到 CPU、内存、JVM 的 GC 情况等;访问 /actuator/health,就知道项目是不是健康地跑着;再比如 /actuator/mappings,能直接看到所有的 Controller 映射路径,跟打印接口文档差不多一个意思。

这些数据别看是 JSON,其实背后都是真材实料,尤其是在应用卡顿或者突然宕机的时候,能第一时间帮你定位问题。

Spring Boot Admin 把指标“画”出来

Actuator 虽然好用,但看 JSON 数据谁不头大?这时候就得请出 Spring Boot Admin——它能把 Actuator 的数据用图形化方式展示出来,不仅美观,还一目了然。

Spring Boot Admin 是单独运行的服务端程序,咱得先新建一个项目作为监控服务端。


<dependency>
    <groupId>de.codecentricgroupId>
    <artifactId>spring-boot-admin-starter-serverartifactId>
dependency>

然后在主类加一个注解:

@EnableAdminServer
@SpringBootApplication
public class MonitorServerApp {
    public static void main(String[] args) {
        SpringApplication.run(MonitorServerApp.class, args);
    }
}

监听端口设置成 9090,避免跟其他服务冲突:

server.port=9090

到这一步,监控中心就建好了。接下来,被监控的项目也得“自报家门”才行。我们给它加个客户端依赖,让它自动注册到监控中心:

<dependency>
    <groupId>de.codecentricgroupId>
    <artifactId>spring-boot-admin-starter-clientartifactId>
dependency>

再加个配置告诉它去哪注册:

spring.boot.admin.client.url=http://localhost:9090

只要一启动项目,再去监控中心刷新一下页面,就能看到你的服务“在线”了。CPU 使用率、内存占用、磁盘空间、线程状态、请求路径、甚至日志级别,点点鼠标就能查个明明白白。

说实话,这比盯着命令行日志或者拿 curl 一点点试舒服多了,而且你还可以看到历史变化趋势。

再说说日志这回事

Actuator 和 Admin 都搞定了WhatsApp网页版,监控到位,但有时候我们需要看日志来具体分析问题。Spring Boot 默认用的是 Logback,功能挺全的,关键是你不用管它,它就已经在背后工作了。

想自定义日志格式和保存方式,就得加一个 logback.xml 配置文件,路径放在 resources 目录下。

<configuration>
    
    <property name="LOG_HOME" value="${catalina.base}/logs/" />
    
    <appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
        layout>
    appender>
    
    <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.logFileNamePattern>
            <MaxHistory>30MaxHistory>
        rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
        layout>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MBMaxFileSize>
        triggeringPolicy>
    appender>
    
    <root level="INFO">
        <appender-ref ref="Stdout"/>
        <appender-ref ref="RollingFile"/>
    root>
configuration>

这个配置的意思是啥呢?简单说:

如果你不想看某些包的日志,可以在配置文件里直接关闭:

logging.level.org=OFF

这是我在开发中最常用的操作,尤其是某些三方包打印日志太猛时,直接关掉,世界清静了。

再写一段代码来感受一下:

private static final Logger logger = LoggerFactory.getLogger(MyController.class);
@RequestMapping("/log")
@ResponseBody
public String printLog() {
    logger.info("这是一条日志信息");
    return "日志打印完毕";
}

点开浏览器访问 /log,日志里立马出现刚打印的内容。这个对调试特别有用,哪里有问题,打几行日志能立马定位问题。

一点经验之谈

用 Actuator 配合 Admin 能做到什么程度?我举个我自己项目中的例子。

有一次我们应用线上 CPU 飙到 100%,但服务居然没崩。我第一时间用 Admin 看了下线程情况,发现某个业务线程池爆了WhatsApp网页版,任务排队超过了 1000 条。后来一查,是某个接口并发太高,限流策略没生效,直接给打满了。

如果没有这些指标,我可能得看半天日志,或者靠猜。而用 Admin 一眼就看到是哪个线程、哪一类请求,排查效率翻倍提升。

最后

Spring Boot 的 Actuator 是个小而强的监控工具,用起来不难,却能带来大大的安全感。配合 Spring Boot Admin,就像给你的应用加了个“指挥中心”,每个指标都能看得见摸得着。再配合 Logback 把日志管理起来,不管是调试问题,还是线上故障分析,都能快人一步。

做 Java 开发,别总觉得“监控”和“日志”是运维该操心的事。你写的代码能不能跑得稳、扛得住,其实就藏在这些小细节里。

相关文章