Java slf4j简单记录器不在Maven Vertx项目上工作

Java slf4j简单记录器不在Maven Vertx项目上工作,java,slf4j,vert.x,Java,Slf4j,Vert.x,下面是我的logback.xml文件: <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <!

下面是我的
logback.xml
文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
 <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{36} - %msg%n</Pattern> -->
     <Pattern>%-30(%date{ISO8601,UTC} [%thread]) %highlight(%-5level) %logger{32} %line - %msg%n </Pattern>
   </layout>
 </appender>  
 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
   <file>logs/search_service.log</file>
   <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
     <!-- <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern> -->
     <Pattern>%-30(%date{ISO8601,UTC} [%thread]) %highlight(%-5level) %logger{32} %line - %msg%n </Pattern>
   </encoder>
   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>logs/archived/search_service.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <!-- <maxFileSize>10MB</maxFileSize> -->
    </timeBasedFileNamingAndTriggeringPolicy>
   </rollingPolicy>
  </appender>

  <root level="info">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>  
  <!-- <root level="debug">
      <appender-ref ref="STDOUT" />
      <appender-ref ref="FILE" />
  </root> -->
</configuration>
以下是我部署my fat jar的方式:

java -DconfigPath="myconfig.conf" -DLogback.configurationFile="logback.xml" -jar myapp.jar
我的问题是,当我运行上述命令时,它会给我三个警告,如下所示,并且没有日志记录,也没有创建日志文件:

log4j:WARN No appenders could be found for logger (io.netty.util.internal.logging.InternalLoggerFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

在您的配置和类路径中似乎有很多混乱。您正在引用一个logback.xml文件,您对slf4j simple具有Maven依赖性,并且您正在从Log4j获取消息。Logback、slf4j simple和Log4j是三种完全不同的测井系统,slf4j可以与之接口

所以让我们后退一分钟。SLF4J的要点是,它是一个“门面”(缩写中的“F”)用于您想要使用的任何真正的日志系统。这意味着,如果您的代码使用SLF4J API进行日志记录,则可以根据需要更改日志记录系统。更重要的是,如果您使用SLF4J API调用日志库,那么您可以将SLF4J连接到项目其余部分正在使用的日志系统

配置SLF4J以使用所需的真实日志系统的方法是在类路径中包含for。绑定将日志消息从SLF4J API重定向到真正的底层日志系统。大多数绑定还需要在类路径上有真正的日志系统(也就是说,如果您使用的是log4j1.2,那么在类路径上应该包括slf4j-log4j12以及Log4j)。其他绑定(如Logback和slf4j simple)既充当绑定,也充当实际的日志系统,因为它们从一开始就被设计用于slf4j。在类路径上只需要一个绑定,并且除了要在类路径上使用的日志系统之外,不需要其他日志系统。但是您需要弄清楚您实际想要使用哪个日志系统,因为有很多选择,就像任何技术决策一样

由于您使用Maven来管理类路径上的依赖项,因此可以运行“mvn”来查看所有依赖项的列表,以及您的依赖项带来了什么。这可能会帮助您了解您和您的库正在使用哪些绑定和日志记录系统

用于SLF4J的性能良好的库将只包括SLF4J api,因为绑定只应由主应用程序使用。如果您有一个库试图使用它自己的日志系统,那么您可能需要使用Maven来实现它。如果需要,您可以将其他日志记录系统重定向为使用SLF4J


一旦您对依赖项进行了分类,以便只有一个日志系统连接到SLF4J,并且希望使用不同日志系统的任何依赖项都会桥接到该系统,那么您应该能够配置该日志系统,不管它如何工作(例如,如果使用logback,则为logback.xml)查看您的日志。

您希望使用哪个日志后端?logback还是slf4j简单?您还需要包括log4j-over-slf4j。它们不同吗?如果我的问题很幼稚,我很抱歉。我刚刚开始在应用程序方面工作和学习。我想使用logback获取一个记录器,该记录器将接受终端中提供的logback文件,并将日志信息和错误消息记录到日志文件中,还可能是控制台。@user3243499 slf4j是一个外观,在整个应用程序中提供一个统一的日志API。在这个外观后面,您必须配置一个日志记录实现。该项目是slf4j API的全功能直接实现。除slf4j外,您还必须单独下载和配置Logback。与slf4j捆绑的slf4j simple也是slf4j API的直接实现,但功能非常有限。对于其他不考虑slf4j的日志框架(如log4j),您必须使用适配器。感谢Basil的解释。是否存在maven依赖项,我可以将其添加到我的pom文件中,并使用上面的方法(其中我提供了logback文件)开始日志记录工作?如果需要在我的类文件中添加任何特定的代码段,请告诉我。谢谢
java -DconfigPath="myconfig.conf" -DLogback.configurationFile="logback.xml" -jar myapp.jar
log4j:WARN No appenders could be found for logger (io.netty.util.internal.logging.InternalLoggerFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.