在spring boot应用程序中用slf4j替换java平台系统记录器

在spring boot应用程序中用slf4j替换java平台系统记录器,java,spring-boot,logback,slf4j,java-module,Java,Spring Boot,Logback,Slf4j,Java Module,我有一个spring boot应用程序构建为多模块gradle项目(旧式,而不是花哨的拼图) 我想要实现的是用sl4j和logback替换java平台记录器(例如,SSlLogger/System.getLogger),它们在我的应用程序中使用,并在运行时由spring boot admin server管理。我需要我所有的日志记录器写入文件,而不是控制台,否则我将无法在Logz.io中看到日志。 我不控制我的应用程序的部署方式,但我控制构建胖jar的方式(因此,带有终端命令“java-…”的手

我有一个spring boot应用程序构建为多模块gradle项目(旧式,而不是花哨的拼图)

我想要实现的是用sl4j和logback替换java平台记录器(例如,SSlLogger/System.getLogger),它们在我的应用程序中使用,并在运行时由spring boot admin server管理。我需要我所有的日志记录器写入文件,而不是控制台,否则我将无法在Logz.io中看到日志。 我不控制我的应用程序的部署方式,但我控制构建胖jar的方式(因此,带有终端命令“java-…”的手册并没有太大帮助:()

我开始跟着导游走,但被卡住了

为了简单起见,我的结构是->

build.gradle
    /application-module
        build.gradle (combines 3 other modules)
        /src /...
    /rest-module
        build.gradle
        /src /...
    /service-module
        build.gradle
        /src /... 
    /persistency-module
        build.gradle
        /src /... 
所以,我想再添加一个模块

/log-module
    /src -> with actual classes 
         module-info.java
         Slf4jLogger implements System.Logger 
         Slf4jLoggerFinder extends System.LoggerFinder
并将其包含到我的应用程序模块中

但当我尝试构建它时,我得到了“error:modulenotfound:org.slf4j”,并且应用程序不是build


那么,我做错了什么?我需要什么额外的插件/配置?它甚至能让我实现我的目标吗?

好的,我设法找到了解决方案。它是

因此,我甚至不需要jigsaw模块——只需要JDK的服务提供者机制

因此,实际上您需要3个文件[这些是pastebin示例的id;但它们几乎与java-9-logging-api文章中的相同]

  • AkXY3zgu->适配器类
  • YFUkZwat->记录器提供程序
  • CD6NNibj->meta inf文件-这是最棘手的部分(文件名:)
文件名->META\U INF/services/java.lang.System$LoggerFinder

com.my-projects.commons.logs.Slf4jLoggerFinder

现在正常的应用程序启动系统记录器将替换为slf4j适配器。 但是,还是要检查系统记录器是如何创建的->例如,我主要需要SSLLogger,并且那里有一些基于系统属性的逻辑