标签: slf4j

初始化 OpenSaml 时出现 java.lang.NoSuchMethodError: org.slf4j.helpers.Util.report(Ljava/lang/String;)V

我在我的 Maven 项目中使用 OpenSaml。当我尝试使用 DefaultBootstrap 类的变体初始化 OpenSaml 时,我得到以下堆栈跟踪:

    java.lang.NoSuchMethodError: org.slf4j.helpers.Util.report(Ljava/lang/String;)V
    org.apache.log4j.Log4jLoggerFactory.<clinit>(Log4jLoggerFactory.java:47)
    org.apache.log4j.LogManager.getLogger(LogManager.java:42)
    org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
    org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103)
    org.opensaml.xml.XMLConfigurator.<init>(XMLConfigurator.java:56)
    org.opensaml.xml.XMLConfigurator.<init>(XMLConfigurator.java:73)
Run Code Online (Sandbox Code Playgroud)

我尝试执行 mvn dependency:tree 来找出从何处加载 SLF4J jar 的不匹配版本。我还尝试在 mvn.bat 中将 -verbose 选项传递给 Java。这些选择都没有帮助。我尝试一一删除 pom.xml 中的依赖项。再次,没有运气。如果有人可以阐明如何找到罪魁祸首罐子或如何解决此错误,我将不胜感激。

java slf4j nosuchmethoderror opensaml

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

如何在Android Gradle构建中使用Mina和slf4j?

我得到一个DEX错误(已添加类..)因为mina依赖于slf4j-api,而slf4j-android也在内部携带一些slf4j-api.有没有办法解决这个问题,同时仍然使用gradle外部(基于maven)依赖?

dependencies {
    compile('org.apache.mina:mina-core:2.0.7')
    compile 'org.slf4j:slf4j-android:1.6.1-RC1'
}
Run Code Online (Sandbox Code Playgroud)

android slf4j gradle mina

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

logback.xml 在普通 Java 项目中被忽略

显然,我的 Java 项目中没有发生日志记录。logback.xml文件位于类路径中,但显然被忽略了。没有报告有关此文件的任何错误。

JAR 以下列方式附加(使用 Maven):

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.13</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

以下消息出现在控制台中:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:MYREPO/org/slf4j/slf4j-simple/1.7.5/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:MYREPO/ch/qos/logback/logback-classic/1.0.13/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
Run Code Online (Sandbox Code Playgroud)

显然,这两个 jar 都是由单个 Maven 条目引用的。

java logging logback slf4j

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

避免字符串连接大型日志消息

使用像 slf4j 这样的东西的优点之一是它通过使用参数化日志来避免字符串连接。但是,当您有很长的日志消息时,如何避免性能下降?

logger.debug("This is a very long message that prints two values." +
    " However since the message is long, we still incur the performance hit" +
    " of String concatenation when logging {} and {} ", value1, value2);
Run Code Online (Sandbox Code Playgroud)

有没有办法避免这种性能成本,而不使用丑陋的 if 块来检查日志级别?

 if (logger.isDebugEnabled()) {
     logger.debug("This is a very long message that prints two values." +
         " However since the message is long, we still incur the performance hit" +
         " of String concatenation when logging {} and {}", …
Run Code Online (Sandbox Code Playgroud)

java log4j slf4j

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

使用Logger时Hibernate MappingException

我有一个奇怪的错误:我有一个使用Hibernate注释的类.一切都很好,直到我开始引入这样的日志记录:

@Entity
@Table(name = "GROUP_TABLE")
public class Group {
    private static final Logger logger = LoggerFactory.getLogger(Group.class);  
Run Code Online (Sandbox Code Playgroud)

产生的错误是:

[错误]引起:org.hibernate.MappingException:无法确定:org.slf4j.Logger的类型,在表:container,对于列:[org.hibernate.mapping.Column(logger)]

根据我的理解,静态字段在这种情况下应该没问题.那么为什么hibernate试图创建一个列"logger"?

我的依赖项是log4j 1.2.17,slf4j-api 1.7.7和slf4j-log4j12-1.7.7.

谢谢!

java hibernate slf4j

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

禁止SLF4J多重绑定摇篮

试图解决臭名昭著的SLF4J多重绑定问题。这里有大约一百万个针对Maven的解决方案,但是没有一个可以翻译成Gradle(显然不是Gradle专家)。我已经尝试了一些解决方案,configurations但是都没有正常工作。这是我遇到的错误(正如我提到的,我试图抑制警告)

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in     [jar:file:~/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-nop/1.7.22/3a4392836f875995446373b008e39cdb9a532fbe/slf4j-nop-1.7.22.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:~/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-slf4j-impl/2.7/382b070836b8940a02d28c936974db95e9bfc3a4/log4j-slf4j-impl-2.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.helpers.NOPLoggerFactory]
Run Code Online (Sandbox Code Playgroud)

这是我的项目中唯一的SLF4J依赖项:

dependencies {
    compile group: 'org.slf4j', name: 'slf4j-nop', version: '1.7.+'
    ...
}
Run Code Online (Sandbox Code Playgroud)

另外,如果有帮助,我在运行单元测试时也会遇到问题。

更新:找出了一种依赖关系是使用org.apache.logging,而org.apache.logging则使用了SLF4J。如果我排除了apache logger的组,则整个程序将失败,因为该依赖项会引发ClassNotFoundException。那么现在怎么办?

java slf4j gradle

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

slf4j-log4j桥与log4j 2.8.1

我正在努力删除对log4j 1.x版本的任何依赖,因为它们已经EOL了.我的代码使用了slf4j-log4j12网桥.在maven中,slf4j-log4j的编译依赖关系显示版本为1.2.17的log4j,更新列显示为2.8.1.

所以我尝试在build.gradle中跟随,希望使用log4j-api-2.8.1代替默认提取的log4j-1.2.17.但这似乎并没有奏效.我仍然在依赖的jar中看到log4j-1.2.17.

所以我想问一下,这是不允许的事情?即没有slf4j-log4j桥接到log4j 2.8.1版本或者那个问题2.x版本?基本上我应该迁移我的代码以使用log4j-api-2.8.1.或者我在这里遗漏了什么?

dependencies {
    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.8.1'
    compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.25'   
}
Run Code Online (Sandbox Code Playgroud)

log4j bridge slf4j log4j2

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

仅在超类/抽象类中声明 slf4j 记录器并在所有子类中使用它是一种好习惯吗?

仅在超类/抽象类中声明 slf4j 记录器使子类的内容更清晰(没有像private static final Logger logger = LoggerFactory.getLogger(Tuple5x36.class);混乱一样的混乱)。

这种做法是推荐的,还是存在重大缺陷?

java logging slf4j

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

Spring Boot slf4j + log4j2 日志记录被 logback 依赖阻止

我将创建我的第一个 spring boot 应用程序,我正在创建一个类似 helloworld 的应用程序来测试一些功能。其中之一是通过 slf4j 外观进行日志记录。

我想将 log4j2 与 log4j2.json 配置文件一起使用。不幸的是 slf4j 也发现了一个 logback-classic 依赖并开始使用它。查看我的依赖项,只有 spring-boot-starter-parent 依赖于 logback,但 maven 排除语法在父 pom 上不起作用。

我使用本教程使用 slf4j 设置 log4j2。这是我的整个 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.helloworld</groupId>
<artifactId>helloworld</artifactId>
<version>0.1.0</version>

<name>helloworld</name>

    <parent>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>

        <!-- Database -->

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.197</version>
        </dependency> …
Run Code Online (Sandbox Code Playgroud)

logback slf4j maven log4j2 spring-boot

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

带有 CompletableFuture 的 MDC 记录器

我正在使用 MDC Logger,除了一种情况外,它对我来说非常有用。无论我们在代码中的何处使用 CompletableFuture,对于创建的线程,MDC 数据都不会传递到下一个线程,因此日志失败。例如,在我使用以下代码段创建新线程的代码中。

CompletableFuture.runAsync(() -> getAcountDetails(user));
Run Code Online (Sandbox Code Playgroud)

日志结果如下

2019-04-29 11:44:13,690 INFO  | /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |[http-nio-8182-exec-5] RestServiceExecutor:  service: 
2019-04-29 11:44:13,690 INFO  | /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |[http-nio-8182-exec-5] RestServiceExecutor: 
2019-04-29 11:44:13,779 INFO  | /app/rest/controller/userdetails | f80fdc1f-8123-3932-a405-dda2dc2a80d5 |[http-nio-8182-exec-5] UserDetailsRepoImpl: 
2019-04-29 11:44:13,950 INFO   [ForkJoinPool.commonPool-worker-3] RestServiceExecutor:  header: 
2019-04-29 11:44:13,950 INFO   [ForkJoinPool.commonPool-worker-3] RestServiceExecutor:  service: 
2019-04-29 11:44:14,012 INFO   [ForkJoinPool.commonPool-worker-3] CommonMasterDataServiceImpl: Cache: Retrieving Config Data details.
2019-04-29 11:44:14,028 INFO   [ForkJoinPool.commonPool-worker-3] CommonMasterDataServiceImpl: Cache: Retrieved Config Data details : 1
2019-04-29 11:44:14,028 INFO   [ForkJoinPool.commonPool-worker-3] CommonMasterDataServiceImpl: Cache: Retrieving Config Data …
Run Code Online (Sandbox Code Playgroud)

java slf4j mdc spring-boot completable-future

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