springboot后台系统,需要开发日志系统,记录每一步的操作(登录,创建订单,删除,查询等等),怎么做好些?

在后台的每一个接口都进行插入数据库操作?
有没有框架之类的,简化开发?

阅读 2.3k
avatarAI BotBETA

在Spring Boot系统中开发日志系统以记录每一步的操作(如登录、创建订单、删除、查询等),有多种方式可以实施。直接在每个接口中进行数据库插入操作可能不是最高效或最优雅的方式,因为它可能会增加接口的响应时间,并可能引发额外的性能问题。

以下是一些建议的步骤和框架来简化开发:

  1. 使用日志框架

    • 使用像Log4j2、SLF4J+Logback等日志框架来记录操作日志。这些框架允许你以不同的级别(如DEBUG、INFO、WARN、ERROR)记录日志,并可以将日志输出到控制台、文件、数据库或其他目标。
  2. AOP(面向切面编程)

    • 利用Spring AOP或AspectJ来定义切面,捕获所有需要记录日志的方法调用。这样,你就不需要在每个接口中手动编写日志代码。
    • 你可以定义一个切面来拦截特定的包或类中的方法,并在方法执行前后记录日志。
  3. 自定义注解

    • 创建一个自定义注解(如@Loggable),用于标记需要记录日志的方法。
    • 在AOP切面中检查方法上是否存在此注解,如果存在,则记录日志。
  4. 日志级别和策略

    • 根据不同的需求,为不同的操作设置不同的日志级别。
    • 考虑使用日志滚动策略,以定期备份或删除旧的日志文件。
  5. 日志存储

    • 虽然数据库是一个选项,但通常不建议将大量日志直接存储在数据库中,除非有特定的需求(如实时分析)。
    • 文件存储是一个更常见的选择,特别是当与日志框架结合使用时。
    • 另一个选择是将日志发送到专门的日志管理系统(如ELK Stack:Elasticsearch、Logstash、Kibana),这些系统提供了强大的日志分析功能。
  6. 异常处理

    • 确保你的日志系统能够捕获并记录异常信息,以便在出现问题时能够迅速定位和解决。
  7. 框架和库

    • 除了Spring Boot本身的支持外,你还可以考虑使用其他库或框架来简化开发,如spring-boot-starter-logging(为Spring Boot项目提供了日志的自动配置)和spring-aop(提供了面向切面编程的支持)。
    • 还有一些第三方库,如spring-boot-starter-data-jpa-logging(用于将日志记录到数据库),但请注意其性能和适用场景。
  8. 安全性

    • 确保你的日志系统遵循适当的安全措施,如加密敏感信息、限制访问权限等。
  9. 测试

    • 在开发过程中和完成后,对你的日志系统进行充分的测试,以确保它能够正确地记录所有需要的信息。
  10. 监控和警报

    • 使用监控工具来监视日志系统的性能和状态。
    • 设置警报,以便在出现错误或异常情况时及时得到通知。

通过结合这些步骤和框架,你可以为Spring Boot后台系统开发一个高效、可扩展且易于维护的日志系统。

5 个回答

开发一个日志系统以记录每一步操作(如登录、创建订单、删除、查询等)是非常重要的,这不仅有助于监控系统行为,还能在出现问题时进行追踪。

关于这个问题,我写了一篇文章来展开说明如何解决。

可以参考一下我的最新一篇文章,关于如何在 Spring Boot 中开发日志系统的详细指南。

如何在Spring Boot中开发一个操作日志系统

运营审计用:

数据库建一个操作日志表,字段:操作人、操作时间、操作类型(定义每个动作名字)、操作描述,更详细一点,可以继续加操作IP、设备类型、页面链接、来源页面、模块名字等等。
后台加一个查询列表页面,根据人、时间、操作类型等查询。

技术排错用:

常见日志服务记录都可以。ELK或者Loki等。

自荐一下 如何优雅的记录业务日志

通过注解的方式,实现自定义业务日志记录。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface BizLog {

    /**
     * 日志记录模块
     *
     * @return logModule
     */
    EventLogModule logModule() default EventLogModule.DEALS;

    /**
     * 日志记录原因
     *
     * @return logType
     */
    EventLogType logType();

    /**
     * 需要记录的参数
     * @return param name
     */
    String logArg() default "vo";
}

如果你愿意看源码,建议看看若依框架(基于 SpringBoot 的后台系统)是怎么实现的,可以作为参考。

若依后台管理日志界面

基于AOP,功能还可以继续拓展,我这个是带国际化功能

  • 定义注解:
  • @LogOperation修饰方法
    image.png
  • @Param修饰参数
    image.png
  • 写方法拦截器
    image.png
  • 配置AOP
    image.png
  • 使用
    image.png
推荐问题