标签: slf4j

类路径包含多个与 Gradle 的 SLF4J 绑定

构建 Gradle 项目时出现以下错误:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/qliu/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.0.6/ba738848da3e6fffa0107771c75546eb6d407f3c/logback-classic-1.0.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/qliu/.gradle/caches/modules-2/files-2.1/uk.org.lidalia/slf4j-test/1.1.0/f4f523049e041dea673bd421d7b0d61fb5e49548/slf4j-test-1.1.0.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 [ch.qos.logback.classic.selector.DefaultContextSelector]
Run Code Online (Sandbox Code Playgroud)

还有我的 Gradle 构建文件:

dependencies {
        // for output logger messages
        compile group: 'log4j', name: 'log4j', version: '1.2.17'

        // for testing outputed logger messages
        compile group: 'uk.org.lidalia', name: 'slf4j-test', version: '1.1.0'
}
Run Code Online (Sandbox Code Playgroud)

我如何删除警告?

unit-testing slf4j gradle

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

应用程序不会在 Eclipse 中的 Tomcat 服务器上运行

我正在运行一个突然停止工作的 spring boot 应用程序我不得不升级到不同的笔记本电脑,当我安装软件时 - 突然间我的服务器无法启动

当我尝试在 eclipse 中的 tomcat 服务器上运行我的代码时,我得到的错误如下

java.lang.ClassCircularityError: java/util/logging/LogRecord
at org.slf4j.bridge.SLF4JBridgeHandler.getSLF4JLogger(SLF4JBridgeHandler.java:198)
at org.slf4j.bridge.SLF4JBridgeHandler.publish(SLF4JBridgeHandler.java:287)
at java.util.logging.Logger.log(Logger.java:738)
at java.util.logging.Logger.doLog(Logger.java:765)
at java.util.logging.Logger.logp(Logger.java:930)
at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:180)
at org.apache.juli.logging.DirectJDKLog.debug(DirectJDKLog.java:103)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:369)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153)
at org.apache.catalina.startup.Catalina.start(Catalina.java:625)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Run Code Online (Sandbox Code Playgroud)

我正在使用 Eclipse Mars (4.5)、Java jdk1.8.0_51 和 Tomcat 8 apache-tomcat-8.0.24(与 apache-tomcat-8.0.23 相同的错误)

有没有人对我可以尝试解决这个问题有什么建议?

如果我运行我的 maven 目标来生成 war 文件并直接部署到 tomcat,则不会发生此问题 - 只有当我尝试从 eclipse 中运行我的服务器时才会发生

只是指出 - 当我使用 Java 7 版本 79 时,这一切都完美无缺,但想让它与 Java 8 一起使用

eclipse slf4j maven-3 java-8 tomcat8

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

了解 Logback 和 Slf4j

我试图将所有不同的日志工具(log4j、slf4j、logback、jcl 等)以及它们都做了什么。

我知道 slf4j 是不同日志工具的外观,可以轻松地在任何日志工具之间切换。但是当我谈到 logback 时,我很困惑。我知道 logback 是 log4j 的继承者,并且从这篇文章中它使用了“本地实现”这个词;这到底是什么意思。根据我的理解,logback 与 slf4j 是一回事......所以它也是一个外观吗?我对 logback 是一个后端日志工具和一张与 slf4j 一样的面孔有不同的描述。

我尝试了一个小型测试项目来了解它是如何工作的。所以在我的 maven pom 中,我放了:

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

然后在我输入的代码中:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Foo {
    /** The Constant LOGGER. */
    private static final Logger LOGGER = LoggerFactory.getLogger(Foo.class);
}
Run Code Online (Sandbox Code Playgroud)

那么这个实现是否意味着 slf4j 是 logback 的外观,而 logback 是与 log4j 和 jcl 相同的后端日志记录工具?

java logging log4j slf4j

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

How to stop logging in jetty application

I am using jetty to implement websocket client. This is producing a lot of noise in log file in start up of application and when failed reconnect websocket. Actually in case of websocket connection failure i am retrying after a minute so after every minute it it producing this kind of log:

2017-06-12 14:23:04 | DEBUG | [main] o.e.j.u.log:173 - Logging to Logger[org.eclipse.jetty.util.log] via org.eclipse.jetty.util.log.Slf4jLog
2017-06-12 14:23:04 | INFO  | [main] c.h.h.v.c.WebSocketListener:53 - STARTING WS Client
2017-06-12 14:23:04 | DEBUG …
Run Code Online (Sandbox Code Playgroud)

java jetty logback slf4j embedded-jetty

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

覆盖运行时 SLF4J 绑定以进行测试

我正在写一个包。我需要slf4j-log4j12用于运行时的特定附加程序。但是对于测试,我只需要一个slf4j-simple绑定。所以,我的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>

    <properties>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
    </properties>

    <groupId>com.bharani</groupId>
    <artifactId>LoggingDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- Direct dependencies -->
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
            <scope>runtime</scope>
        </dependency>

        <!-- Test dependencies -->
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.assertj/assertj-core -->
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.8.0</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.25</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
Run Code Online (Sandbox Code Playgroud)

当我运行我的程序时,我得到了预期的log4j …

java slf4j maven

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

如何使用 SLF4J 排除特定记录器的特定类

我的程序有一个底层系统,可以在 elasticsearch 中保留每个日志。我有一个在线获取数据并用 slf4j 记录的类log.error(data)。这允许底层系统将日志保存在 elasticsearch 中,但它也会用每个获取的数据淹没控制台。

我希望consoleAppender仅针对这个特定类禁用。

我看过其他帖子,其中人们会禁用consoleAppenderwith logback从特定类中排除所有日志记录,但我找不到有关如何禁用一个类中的一个记录器的任何信息。

这可能吗?

slf4j spring-boot

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

在 AWS Lambas 中使用 slf4j(和 io.symphonia:lambda-logging)进行日志记录时,CloudWatch 输出中出现新行问题

我遇到的问题是,在 Java 中使用 slf4j(和 io.symphonia:lambda-logging)进行日志记录时,对于日志消息中的每个新行,CloudWatch 都会输出一条新的日志消息。对于使用LOGGER.error(String msg, Throwable t)) 的异常也会发生这种情况

而且由于 CloudWatch 输出的消息未排序,并且多个消息可能来自不同的 Lambda(或其他服务等),因此日志变得不可读。

logging slf4j amazon-cloudwatch aws-lambda

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

将 commons-logging 连接到 slf4j-api

想知道我应该包含的依赖项,以将 commons-logging 桥接到 slf4j-api。

通过添加以下内容,我的构建成功:

"org.apache.logging.log4j:log4j-api:2.12.1"
"org.apache.logging.log4j:log4j-core:2.12.1"
"org.apache.logging.log4j:log4j-1.2-api:2.12.1"
"org.slf4j:slf4j-api:${slf4j_version}"
"org.apache.logging.log4j:log4j-slf4j-impl:2.12.1"
"org.slf4j:slf4j-jcl:1.7.25"
Run Code Online (Sandbox Code Playgroud)

但无法启动我的服务:( Getting java.lang.ExceptionInInitializerError... 引起:org.springframework.beans.factory.CannotLoadBeanClassException

slf4j apache-commons-logging log4j2 slf4j-api

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

Spring Boot Slf4j 更改日志时间戳以使用 UTC 时区

具有默认记录器设置并使用 lombok 的 Spring Boot 应用程序 @Slf4j

打印日志,例如 {"timestamp":"2020-02-26T11:25:57.485-05:00" ..........} 11:25 显示的时间是美国东部标准时间或纽约时区

我们如何将其更改为以 UTC 时区记录时间戳?

我试过设置

logging: pattern: dateformat: yyyy-MM-dd HH:mm:ss.SSS, UTC

还可以使用设置 JVM 级别的 timzone

@PostConstruct TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

并尝试在 application.yaml 中进行配置
logging: pattern: console: '%d{"yyyy/MM/dd HH:mm:ss,SSS,UTC"} [%p] [%t] %M\(%F:%L\) - %msg%n'

logging slf4j lombok spring-boot

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

使用 SLF4J 记录异常时,Sonarcloud 会警告“没有足够的参数”

我用 Java 管理一个开源项目,在我的代码中有大约 20 个地方我使用以下模式记录异常(slf4j 版本 1.7.30)

private static final Logger logger = LoggerFactory.getLogger();

... 

try {
  interfaces = NetworkInterface.getNetworkInterfaces(); 
} catch (SocketException ex) {
  logger.error("Socket exception when retrieving interfaces: {}", ex);
}
Run Code Online (Sandbox Code Playgroud)

或类似

try {
  // stuff
} catch (IOException ioe) {
  logger.error("Server error: {}", ioe);
}
Run Code Online (Sandbox Code Playgroud)

从今天开始,SonarCloud自动代码质量审查已开始使用规则标记这些java:S2275(Printf 样式的格式字符串不应导致运行时出现意外行为),并带有特定消息“参数不足”。

编辑:值得注意的是,当 anException是最后一个参数时,这似乎总是发生。下面的模式确实没有标志:

try {
  // Server connection code
} catch (IOException e) {
  logger.error("Server Connection error: {}", e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

另一个 StackOverflow …

java slf4j exception-logging sonarcloud

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