跳转到正文

快速开始

本例使用一个简单保存器,将采集结果输出到应用日志。完成后,访问一个接口即可看到对应的操作记录。

前提:已有能够启动的 EFC Web 应用,且已配置框架基础 Parent。以下依赖按当前源码版本 4.1.0-SNAPSHOT 编写,该版本需在本地或项目 Maven 仓库中可用。

1. 添加依赖

在应用 POM 中导入 Component BOM 并添加日志组件。已通过项目 BOM 或 Business BOM 管理版本时,无需重复导入。

xml
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.own</groupId>
            <artifactId>springboot-component-dependencies</artifactId>
            <version>4.1.0-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.own.component</groupId>
        <artifactId>springboot-component-system-log</artifactId>
    </dependency>
</dependencies>

2. 提供保存器

将以下配置类放在应用扫描范围内。SystemLogPersistence 接收完整日志,本例仅输出几项摘要,用于验证采集链路。

java
import com.own.component.log.spi.SystemLogPersistence;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class DemoLogConfiguration {
    private static final Logger LOGGER =
            LoggerFactory.getLogger(DemoLogConfiguration.class);

    @Bean
    SystemLogPersistence demoLogPersistence() {
        return record -> LOGGER.info(
                "操作日志 id={} operation={} httpStatus={}",
                record.id(), record.operation().name(),
                record.response().httpStatus());
    }
}

实际项目可将该实现替换为自己的数据库或外部服务调用,也可以直接使用 Business 存储模块

3. 开启采集

yaml
spring:
  application:
    name: log-demo
own:
  system-log:
    enabled: true

采集默认关闭。使用默认记录器时,启用后必须有服务名和至少一个保存器,否则启动失败。服务名优先取 own.system-log.service-name,未配置时取 spring.application.name

4. 标注接口

将 Controller 放在应用扫描范围内:

java
import com.own.component.base.model.R;
import com.own.component.base.model.ResultModel;
import com.own.constant.aop.log.AopSystemLogModule;
import com.own.constant.aop.log.AopSystemLogRecord;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@AopSystemLogModule("日志演示")
public class DemoController {
    @GetMapping("/log-demo/ping")
    @AopSystemLogRecord(name = "测试日志", code = "log.demo.ping")
    public ResultModel<String> ping() {
        return R.success("pong");
    }
}

@AopSystemLogModule 声明模块名称,@AopSystemLogRecord 声明需要记录的操作。两个注解均由 Constant 提供,随组件依赖引入,实际采集由系统日志组件完成。

5. 验证结果

启动应用,按实际端口和认证要求访问 GET /log-demo/ping。接口返回 pong,随后可在应用日志中看到包含事件 ID、操作名称“测试日志”和 HTTP 状态的摘要。

保存异步执行,接口返回与摘要输出可能不是同一时刻。未看到记录时,依次检查总开关、方法注解、保存器 Bean 和应用日志级别。

接下来阅读使用与配置,调整采集内容、响应大小和异步队列。

示例涉及的源码类型

RResultModel