标签: slf4j

如何使用 Guice 注入 SLF4J 绑定?

经过粗略的检查后,SLF4J 和 Guice(实际上是任何 DI 框架)似乎是一种相互冲突的理念。SLF4J 采用的方法是“嘿,我们要到运行时才知道要绑定到哪些类,那没关系。 ” 另一方面,Guice 似乎在说“嘿,我们需要在编译时知道”确切地说,我们要绑定到哪些类。

所以我问:是否可以使用 Guice/Spring/任何 DI 框架来配置/注入 SLF4J 绑定?

更重要的是,JavaClassLoader才是真正在运行时使用适当的 Logger/LoggerFactory/等“注入”SLF4J 的东西。对象,所以我不知道如何注入这些类加载器,以便它们org.slf4j.impl.Logger在运行时返回我想要的:

我问这个问题是因为我喜欢 SLF4J 和针对 API 进行日志记录的好处,而且也喜欢 DI 的好处。有办法让这项工作发挥作用吗?提前致谢!

java spring dependency-injection guice slf4j

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

为什么slf4j Logger没有log方法?

我想知道为什么没有

logger.log(level, ...) 
Run Code Online (Sandbox Code Playgroud)

在 slf4j 中。有具体的原因吗?当从 log4j 迁移到 slf4j 并使用 logback 时,这让我头疼!

java log4j slf4j

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

如何摆脱“类路径包含多个 SLF4J 绑定”警告?

这或多或少是一个“常见”问题,但是,我还没有找到一个好的答案。所以,再次警告:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/eualin/.m2/repository/org/slf4j/slf4j-jcl/1.6.0/slf4j-jcl-1.6.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/eualin/.m2/repository/org/slf4j/slf4j-log4j12/1.5.11/slf4j-log4j12-1.5.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Run Code Online (Sandbox Code Playgroud)

这里有两个可能的问题解决方案[1] [2]

假设它们都为我工作,显然,它们只是黑客,我不确定我是否应该依赖它们中的任何一个。你会推荐我什么?请记住,在终端中不会出现警告;仅当我通过 IntelliJIDEA 运行应用程序时。

任何建议都将受到高度赞赏。

java warnings slf4j

5
推荐指数
2
解决办法
2万
查看次数

如何使用 slf4j / log4j2 发送电子邮件通知?

我研究了其他类似的问题,并进行了一些谷歌搜索来找到我的答案,但我的问题仍然没有答案。我仍然不熟悉其中一些是如何工作的,所以请耐心等待。

我们的 maven pom.xml 使用 slf4j 依赖项:

pom.xml 使用maven导入slf4j

我们的 log4j2.xml 文件如下所示:

包含 smtp 附加程序的 log4j2.xml 文件

我只将其添加到上面的 log4j2.xml 文件中<SMTP name="Mail" ...> </SMTP>,并在我添加的文件的下方<logger name="com.path.class1" ...> <appender ...> </logger>

但由于某种原因,当我调用 log.error("error message") 时,我的电子邮件没有发送给我。我知道 smtp 主机可以工作,因为它用于 .NET 服务。smtp 服务器不需要任何凭据即可使用它。我知道我的 log.error 调用位于正确的目录和文件路径中。我尝试过设置端口,但这没有任何区别。我该如何让电子邮件通知发挥作用?

我什至尝试了 mailAppender,但这也不起作用:在此输入图像描述

java slf4j maven smtpappender log4j2

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

Maven 插件日志记录

我实现了自己的 Maven 插件 mojo,其中使用了 log4j + slf4j。在插件项目中,我已经包含了正确的 jar,并且可以从代码中看到正确的语句记录。

现在我想在另一个客户端项目中使用这个新的 Maven 插件,但无法使其正常工作。

在插件本身中,我在 src/main/resources 下包含了一个 log4j.properties ,它可以正常工作,如上所述。但是,当我尝试将该插件包含在另一个客户端项目中时,不会创建日志文件。

问题是我还必须尝试或做什么才能使其正常工作?谢谢。

logging log4j mojo slf4j maven

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

如何为 slf4j 标记配置 logback.xml 文件

我想org.slf4j.Marker在我的应用程序中使用。我已经有一个 logback.xml 文件,无需标记即可正常工作。Java代码是这样的:

    public class SimpleActivitiIntegrationService implements ActivitiIntegrationService {
        private static final Marker PROCESS_INTEGRATION_MARKER = MarkerFactory.getMarker("PROCESS_INT");
        private static final Logger LOGGER = LoggerFactory.getLogger(SimpleActivitiIntegrationService.class);
        ...
        public void sendRequest(String s) throws RuntimeException {
            LOGGER.debug(PROCESS_INTEGRATION_MARKER, "Method started:%s", "sendRequest");
    }
}
Run Code Online (Sandbox Code Playgroud)

文件logback.xml是这样的:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/${log.file.name}.${log.file.extension}</file>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- daily rollover -->
        <fileNamePattern>
            ${log.path}/${archieve.dir.name}/${log.file.name}.%d{yyyy-MM-dd}.%i.${log.file.extension}
        </fileNamePattern>

        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!-- or whenever the file size reaches 10MB -->
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>

        <!-- keep 30 days' worth of history -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>

    <encoder>
        <pattern> …
Run Code Online (Sandbox Code Playgroud)

logging logback slf4j

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

jboss 不使用 logback 进行日志记录

我正在将一个曾经使用 log4j 的应用程序迁移到 logback/slf4j,并且已经遇到了大约 2 周的问题...我做了一个小项目来测试 logback/slf4j 并且效果很好,但是在应用它时由于某种原因对于实际的应用程序来说,它只是不想工作。

我正在使用 JBoss 6.2 并将 EAR 部署到独立/部署目录并启动服务器(这一切都很好,除了我收到此异常这一事实java.lang.ClassCastException: org.slf4j.impl.Slf4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext),但无论如何,回到主要问题。

当我运行应用程序时,我将其打印到我指定的日志文件中

 10:51:06.752 [main] DEBUG org.jboss.logging - Logging Provider: org.jboss.logging.Slf4jLoggerProvider
10:51:06.780 [main] DEBUG o.j.n.r.client.InitialContextFactory - Looking for jboss-naming-client.properties using classloader sun.misc.Launcher$AppClassLoader@194d4313
10:51:06.782 [main] DEBUG o.j.n.r.client.InitialContextFactory - jboss.naming.client.endpoint.create.options. has the following options {}
10:51:06.783 [main] DEBUG o.j.n.r.client.InitialContextFactory - jboss.naming.client.remote.connectionprovider.create.options. has the following options {}
10:51:06.789 [main] INFO  org.xnio - XNIO Version 3.0.7.GA-redhat-1
10:51:06.798 [main] INFO  org.xnio.nio - XNIO NIO Implementation …
Run Code Online (Sandbox Code Playgroud)

java jboss logback slf4j

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

无法使用 SLF4J 禁用石英调度程序日志记录

将quartz-scheduler添加到项目后,Tomcat的服务器日志会收到以下垃圾邮件:

[INFO] [talledLocalContainer] 12:15:06.319 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - 批量获取0个触发器

我正在尝试禁用该日志消息,该消息每 25 秒左右重复一次。我已经回答过同一问题的许多其他答案,例如:

...建议的方法都不起作用。

我在 中声明了以下依赖项pom.xml

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我已将以下log4j.properties设置添加到我的项目中:

log4j.rootLogger=OFF
log4j.logger.quartz=OFF
log4j.logger.o.quartz=OFF
log4j.logger.org.quartz=OFF
Run Code Online (Sandbox Code Playgroud)

...还有以下内容simplelogger.properties

org.slf4j.simpleLogger.defaultLogLevel=error
Run Code Online (Sandbox Code Playgroud)

除了尝试链接答案之一建议的编程解决方案之外,该解决方案还应禁用所有日志记录,大致如下:

List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
    logger.setLevel(Level.OFF);
}
Run Code Online (Sandbox Code Playgroud)

这似乎禁用了除了石英运行时的日志消息 之外的所有内容。

有没有办法摆脱quartz 中的日志消息,而不需要修改quartz 源代码来删除它?

java logging slf4j quartz-scheduler maven

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

SLF4J - 记录日志,无论日志级别如何

在我的 Java 应用程序中,我使用 SLF4J + Logback 进行日志记录。我在开发环境中使用调试级别日志记录,在生产环境中使用错误级别日志记录。但有一些消息我想在任何情况下记录,无论日志级别如何(类似于System.out.println("Some Message")但使用记录器)。

有什么实际的方法可以实现这一目标吗?我可以使用错误或更低的级别,但我想做的是提供一些信息,所以logger.error("Some message");在语义上是错误的,它不是错误。

我可以在我的logback.xml类中定义另一个记录器,但这并不方便。

实现这一目标的正确方法是什么?

java logging logback slf4j

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

Java 9 中 2 个依赖项中的 SLF4J

我正在为该应用程序开发一个应用程序(https://github.com/stirante/RuneChanger)和一个库(https://github.com/stirante/lol-client-java-api)。在库中,我使用 Java-WebSocket,它最近添加了 SLF4J API。在应用程序中,我有 logback 作为依赖项,它也有 SLF4J 作为依赖项。

在编译应用程序时,我有这样的错误:

[ERROR] the unnamed module reads package org.slf4j.spi from both slf4j.api and lol.client.java.api
[ERROR] the unnamed module reads package org.slf4j from both slf4j.api and lol.client.java.api
[ERROR] the unnamed module reads package org.slf4j.helpers from both slf4j.api and lol.client.java.api
[ERROR] the unnamed module reads package org.slf4j.event from both slf4j.api and lol.client.java.api
Run Code Online (Sandbox Code Playgroud)

完整日志在这里:https : //travis-ci.org/github/stirante/RuneChanger/builds/693607053

我尝试移动库中的依赖项(https://github.com/stirante/lol-client-java-api/commit/f62c31f02ace86d50546af113a94fa37f814fb98),但没有运气。

我该如何处理这种情况?

编辑:暂时我转移org.slf4j到另一个包并且它可以工作,但它看起来像一个丑陋的解决方案,因为日志记录可能无法从这个库中工作。

java slf4j maven java-9 java-module

5
推荐指数
0
解决办法
109
查看次数