标签: slf4j

Logback + Janino + Resin 出现 java.lang.NoSuchMethodError 问题

您好,我正在使用以下版本的 logback 和 Janino :

  <dependency org="ch.qos.logback" name="logback-core" rev="1.0.11" conf="runtime"/>
  <dependency org="ch.qos.logback" name="logback-classic" rev="1.0.11" conf="runtime"/>
  <dependency org="org.codehaus.janino" name="janino" rev="2.6.1" conf="runtime"/> 
Run Code Online (Sandbox Code Playgroud)

使用条件记录配置<if>是:

<root level="INFO">
    <if condition='property("xxx").contains("dev")'>
      <then>
        <appender-ref ref="dev" />
      </then>
    </if>
</root> 
Run Code Online (Sandbox Code Playgroud)

我看到的错误如下:

7:38:54,729 |-ch.qos.logback.classic.joran.action.RootLoggerAction 中的 INFO - 将 ROOT 记录器级别设置为 INFO 无法实例化 [ch.qos.logback.classic.LoggerContext] 报告异常:java.lang .NoSuchMethodError: org.codehaus.janino.ClassBodyEvaluator.setImplementedInterfaces([Ljava/lang/Class;)V 位于 ch.qos.logback.core.joran.conditional.PropertyEvalScriptBuilder.build(PropertyEvalScriptBuilder.java:48) 位于 ch.qos。 logback.core.joran.conditional.IfAction.begin(IfAction.java:67) 位于 ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:276) 位于 ch.qos.logback.core。 joran.spi.Interpreter.startElement(Interpreter.java:148) 位于 ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:130) 位于 ch.qos.logback.core.joran.spi。 EventPlayer.play(EventPlayer.java:50) 位于 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:157) 位于 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java: 143) 在 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:106) 在 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:56) 在 ch.qos.logback .classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75) 在 ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:148) 在 org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java …

logging resin logback slf4j janino

2
推荐指数
1
解决办法
7087
查看次数

将 SLF4J 的绑定切换为 Maven 中的运行时范围依赖项

考虑Java 的简单日志外观 (SLF4J) 。作为背景,它通过简单的外观模式提供 API ,通过将所需的绑定添加到类路径来在运行时确定底层日志记录后端。它可能是标准的java.util.logginglog4jlogbacktinylog

客户端应用程序与日志记录后端的巧妙分离减少了特定应用程序与任何特定日志记录框架之间的耦合。这可以更轻松地将新实现的客户端与已选择日志记录后端的其他项目的现有代码集成。

因此,考虑到日志记录 API SLF4J,对于编译,您只需要slf4j-api,并且应避免将任何特定绑定(如slf4j-log4j12)包含为编译依赖项。

因此,slf4j-log4j12是运行时范围依赖项(而不是编译依赖项)的良好候选者,因为这将允许您在运行时在slf4j 绑定之间切换,而无需重新编译应用程序。

问题:在 Maven 项目中,在哪里设置运行时日志框架绑定之间的切换?有什么例子吗?

slf4j maven

2
推荐指数
1
解决办法
484
查看次数

Java日志:无法加载slf4j,但我正在使用log4j2。怎么修?

当我运行 jar 文件时,出现以下错误:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Run Code Online (Sandbox Code Playgroud)

问题是我没有使用 slf4j,我使用的是 log4j2。它由依赖项使用。Maven 正确地将 org.slf4j:slf4j-api 包含为我正在使用的库的传递依赖项。

我该如何摆脱这个警告?我什至不想记录这种依赖关系的问题。

java logging slf4j log4j2

2
推荐指数
1
解决办法
2827
查看次数

NullPointerException 在 @Produces 方法中获取 bean 类名

我将此类LoggerProducer注入到@Statelessbean 中以生成日志条目,如此处所述

问题是,当CustomerBean调用 时(甚至没有调用logger.info),该@Produces方法(检索 bean 类名)失败并显示NullPointerException。这段代码有什么问题?

@Named
@Singleton
public class LoggerProducer {

    @Produces
    public Logger produceLogger(InjectionPoint injectionPoint) {
        return LoggerFactory.getLogger(
                   injectionPoint.getBean().getBeanClass()); // <- error here
    }   

}
Run Code Online (Sandbox Code Playgroud)

注入记录器的bean:

import org.slf4j.Logger;

@Stateless
@LocalBean
@Named
public class CustomerBean  {

    @Inject
    private Logger logger;

    ......
      logger.info("some message");
Run Code Online (Sandbox Code Playgroud)

java logback slf4j java-ee-8 jakarta-ee

2
推荐指数
1
解决办法
326
查看次数

JSON 格式日志输出的 Spring Boot YML 配置

我正在尝试以 JSON 格式获取日志输出。我通过配置 logback.xml 文件来实现它。是否可以通过YML 文件实现相同的目的?

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
        <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
            <prettyPrint>true</prettyPrint>
        </jsonFormatter>
        <timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
    </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

logback slf4j spring-boot

2
推荐指数
1
解决办法
3293
查看次数

如何抑制某些 Maven 日志但保留其他输出?

我在 CI 环境中运行 Maven,并希望看到它的一些日志输出 - 但我不想看到有关下载工件等的常规消息。

我可以使用-q,但这也抑制了所有有用的东西。

Maven 使用 slf4j 并且默认情况下使用 slf4j-simple 后端,因此没有logging.properties等等,无论如何我如何找出哪个类生成日志消息?

例如,如果我有

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] XXX JDBC Driver - JDBC 4.2                             [bundle]
[INFO] XXX JDBC Driver aggregate                                   [pom]
[INFO] 
[INFO] -----------------< XXX:XXX >------------------
[INFO] Building XXX JDBC Driver - JDBC 4.2 XXXX           [1/2]
[INFO] -------------------------------[ bundle ]-------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ XXXX-jdbc ---
[INFO] Deleting XXXX/target
[INFO] 
[INFO] --- maven-enforcer-plugin:1.3.1:enforce (enforce-java) @ XXX-jdbc …
Run Code Online (Sandbox Code Playgroud)

java logging slf4j maven

2
推荐指数
1
解决办法
1663
查看次数

如何使用 SLF4J 和 Log4j 在日志消息中包含标记

我通过以下方式在 SLF4J 和 Log4j 中使用标记

final Marker marker = MarkerFactory.getMarker("boom");
logger.info(marker, "BLAH BLAH: {}", stuff);
Run Code Online (Sandbox Code Playgroud)

如何在输出的日志消息中包含标记。例如,我希望上面的代码输出如下内容:

INFO - (boom): BLAH BLAH: something
Run Code Online (Sandbox Code Playgroud)

目前标记未显示

INFO: BLAH BLAH: something
Run Code Online (Sandbox Code Playgroud)

我一直在尝试找到一种在 log4j.properties 中配置此功能的方法,但无法找到有关显示标记的任何信息。

java log4j slf4j log4j2

2
推荐指数
1
解决办法
2803
查看次数

在 logback.xml 中禁用 DEBUG 级别日志,保留 INFO 和 ERROR 级别日志

我的 logback.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <jmxConfigurator/>
  <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>

  <property name="LOG_DIR" value="/tmp/logs"/>
  <springProperty name="appName" source="spring.application.name"/>
  <appender class="ch.qos.logback.core.ConsoleAppender" name="STDOUT">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>
        some pattern
      </Pattern>
    </layout>
  </appender>

  <logger additivity="false" level="DEBUG"
    name="xyz">
    <appender-ref ref="STDOUT"/>
  </logger>
  <root level="ERROR">
    <appender-ref ref="STDOUT"/>
  </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我试图从整个应用程序禁用调试日志,但找不到方法。我想打印 INFO、ERROR 级别的日志。

spring log4j logback slf4j disable

2
推荐指数
1
解决办法
7866
查看次数

log4j-to-slf4j 未实现 org.apache.logging.log4j.LogManager

在我的项目中我使用 slf4j,

该项目包括一个使用的库org.apache.logging.log4j:log4j-api:2.14.0

因此,库通过以下方式获取其记录器org.apache.logging.log4j.LogManager.getLogger(abc.class)

我包含log4j-to-slf4j-2.x在我的项目中。但是,查看 log4j-to-slf4j-2.x 的内容显示该类没有实现。

当然,我的项目在运行时就死掉了NoClassDefFound org/apache/logging/log4j/LogManager

我缺少什么?

这不是重复的是否有一个让 log4j2 在 slf4j 上工作的适配器?因为我有一个特定的问题,需要与链接问题中提出的解决方案不同的解决方案。这个问题需要单独讨论。如果您不明白发生了什么,请停止废话结束!

java logging log4j slf4j log4j2

2
推荐指数
1
解决办法
3066
查看次数

springboot2.7.5启动错误 Caused by: java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder

我引入了spring-boot-starter-web,使用了自带的spring-boot-starter-logging框架,在yaml中指定了配置文件,启动报错yaml:

logging:
  level:
    root: info
    com.felix.flink.tutorial.api: debug
  config: classpath:logback-spring.xml
Run Code Online (Sandbox Code Playgroud)

行家:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.felix</groupId>
        <artifactId>flink-tutorial-component</artifactId>
        <version>${revision}</version>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

例外:

23:45:33.009 [Thread-0] DEBUG org.springframework.boot.devtools.restart.classloader.RestartClassLoader - Created RestartClassLoader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@7abaedae
Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:293)
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:118)
    at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:238)
    at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:220)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
    at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:79)
    at org.springframework.boot.SpringApplicationRunListeners.lambda$starting$0(SpringApplicationRunListeners.java:56)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
    at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
    at …
Run Code Online (Sandbox Code Playgroud)

java logging logback slf4j spring-boot

2
推荐指数
1
解决办法
1688
查看次数

标签 统计

slf4j ×10

java ×6

logback ×5

logging ×5

log4j ×3

log4j2 ×3

maven ×2

spring-boot ×2

disable ×1

jakarta-ee ×1

janino ×1

java-ee-8 ×1

resin ×1

spring ×1