Simple Logging Facade for Java(SLF4J)用作各种日志框架的简单外观或抽象层。如果您尝试为应用程序配置日志记录,还请包含您正在使用的实际日志记录框架的标记。
这与排除从父pom继承的子pom中的依赖关系类似,只不过它与测试范围和编译范围有关。 我有一个父 POM,其中包含 org.slf4j:slf4j-api 依赖项...
我有下一个gradle配置: 配置{ 全部 { // 排除 Spring 的默认日志框架 排除组:'org.springframework.boot',模块:'spring-boot-starter-
DynamicThresholdFilter 不适用于 Log4j2 中的特定包
我正在尝试在 Log4j2 中应用 DynamicThresholdFilter 来过滤特定包(com.example.orange)的日志。我的目标是仅基于
我正在尝试通过使用特定属性填充 ThreadContext 并根据这些属性过滤日志来实现动态调试日志记录。 这是我到目前为止所取得的成就: 在萨...
SLF4J 在 vertx 上找不到 logback-classic 的提供者
我正在尝试在 Vertx 项目上添加 Logback,但似乎 SLF4J 无法看到 logback,即使它本身来自 logback 依赖项。我使用了 Maven 依赖项 logback-classic,它可以传递导入...
SLF4J 在 vertx 上找不到 logback-classic 的提供者
我正在尝试在 Vertx 项目上添加 Logback,但似乎 SLF4J 无法看到 logback,即使它本身来自 logback 依赖项。我使用了 Maven 依赖项 logback-classic,它可以传递导入...
我有控制台java应用程序,它是用Maven构建的。这是 pom.xml 中的重要片段: org.apache.sshd 我有控制台java应用程序,它是用Maven构建的。这是 pom.xml 中的重要片段: <dependencies> <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-sftp</artifactId> <version>2.13.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.12</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>2.0.12</version> </dependency> sshd-sftp 需要 slf4j-api,所以我不能只删除 2 个最新的依赖项。 当我运行控制台应用程序时,我收到消息 SLF4J(W):未找到 SLF4J 提供程序。 SLF4J(W):默认为无操作(NOP)记录器实现 SLF4J(W):请参阅 https://www.slf4j.org/codes.html#noProviders 了解更多详细信息。 虽然 slf4j-nop 提供程序处于依赖关系中。 我错过了什么? 更新:我只需要没有关于缺少提供者的消息。我知道 System.setProperty("slf4j.internal.verbosity", "ERROR"); 的方法,并且它有效,但这种方法不适合我的情况...... 更新2:我已经从这里尝试了所有maven - 找到了slf4j-api依赖项,但没有找到提供者 文档中不是很清楚,slf4j-nop 没有做你想要的。文档的链接解释了解决方案 将众多可用提供程序中的一个(且仅一个)放置在类路径上,例如 slf4j-nop.jar、slf4j-simple.jar、slf4j-reload4j.jar、slf4j-jdk14.jar 或 logback-classic.jar 将解决问题。 解决方案是添加这些日志记录库之一并将它们配置为不记录日志。如果您选择 logback,此配置将禁用所有日志记录: <configuration> <root level="OFF"> <appender-ref ref="STDOUT" /> </root> </configuration>
所以我正在编写简单的 Spring Boot(版本 1.56)应用程序。并开始使用 Project lombok,特别是 @Slf4j 功能进行日志记录。日志记录工作正常,但如何配置此记录器?成为
我一直在尝试在 Eclipse Equinox RT 应用程序中设置 logback 过滤器,如下所示: 我一直在尝试在 Eclipse Equinox RT 应用程序中设置 logback 过滤器,如下所示: <?xml version="1.0" encoding="utf-8" standalone="no"?> <configuration debug="true"> <appender name="myappender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>./logs/myapp.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>./logs/myapp_%i.log</fileNamePattern> <minIndex>1</minIndex> <maxIndex>10</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>10MB</maxFileSize> </triggeringPolicy> <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator> <expression>return message.contains("buy: foo") || message.contains("sell: bar");</expression> </evaluator> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern>%d{dd/MM/yyyy HH:mm:ss} | %-5level | %msg%n%ex{short}</pattern> </encoder> </appender> <root level="ALL"> <appender-ref ref="myappender"/> </root> </configuration> 我在 gradle 子项目中有此配置,我将其称为“osgi-log”,以供参考。 plugins { id 'java-library' version '1.0.0' } group 'myapp' version '2.0.0' dependencies { api group: 'org.slf4j', name: 'slf4j-api', version: '2.0.5' implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.3.5' implementation group: 'ch.qos.logback', name: 'logback-core', version: '1.3.5' implementation group: 'org.codehaus.janino', name: 'janino', version: '3.1.12' implementation group: 'org.ow2.asm', name: 'asm', version: '5.2' implementation group: 'org.ow2.asm', name: 'asm-commons', version: '5.2' implementation group: 'org.ow2.asm', name: 'asm-util', version: '5.2' implementation group: 'org.apache.aries.spifly', name: 'org.apache.aries.spifly.dynamic.bundle', version: '1.3.5' } “osgi-log”正在其他 gradle 子项目中设置,如下所示: dependencies { implementation group: 'myapp', name: 'osgi-log' } 当我运行应用程序时,出现以下异常: ERROR in ch.qos.logback.classic.boolex.JaninoEventEvaluator@75243b22 - Could not start evaluator with expression [return message.contains("buy: foo") || message.contains("sell: bar");] org.codehaus.commons.compiler.CompileException: Line 1, Column 1: A class "ch.qos.logback.classic.Level" could not be found at org.codehaus.commons.compiler.CompileException: Line 1, Column 1: A class "ch.qos.logback.classic.Level" could not be found 观察: 如果删除过滤器,日志将按预期工作。正在抛出异常 然后我才添加过滤器。 正在通过系统环境加载配置文件-Dlogback.configurationFile=file:logback.xml。 这是一个java 8应用程序。 任何其他建议或更简单的方法来实现相同的结果,将受到欢迎 - 我想过滤事件并只注册那些匹配某些字符组的事件。 加: 如果有人能帮助我理解为什么 Apache SpiFly 不能动态解析 Janino 实现的所有依赖项,我将不胜感激? 我实际上找到了解决办法。 这似乎是 Janino 依赖端的一个已知问题。 为了使其工作,需要调整 MANIFEST.MF 和 janino 中的 commons-compiler 添加以下行: DynamicImport-Package: ch.qos.logback.*,org.slf4j 参考资料: https://github.com/qos-ch/logback-contrib/pull/29/files https://github.com/qos-ch/logback-contrib/issues/28
我有一个 Spring Boot 项目,其默认日志配置使用 logback。我一直在我的应用程序中使用这种方法进行日志记录: logger.info(“获取用户分页:过滤器{}”...
Scala 日志记录行号与使用 slf4s/slf4j 不匹配?
有谁知道是否有一种方法可以进行日志记录,将真实的行号输出到控制台? 我试图在这里进入 Scala,但无法获得我所依赖的这样的基本内容......
我需要关闭 Icefaces 日志记录。我已经添加了记录器引用,如下所示,但我无法关闭 Icefaces 日志记录。
Log4j 从 2.23.1 更新到 2.24.0/1 -> 日志记录消失了
我有一个又大又旧的遗留项目,我们非常痛苦地更新到 log4j 2,并且使用了很多桥梁。 我有一个又大又旧的遗留项目,我们非常痛苦地更新到 log4j 2,并且使用了很多桥梁。 <!-- LOGGING --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-1.2-api</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j2-impl</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.version}</version> </dependency> slf4j版本是2.0.16 log4j 2.24.0 的发行说明中是这样的文字: 桥梁 JUL-to-Log4j API 和 Log4j 1-to-Log4j API 将不再 可以修改Log4j Core默认的配置。如果这样的话 需要某个功能,必须显式启用它。 从 2.23.1 更新到 2.24.0 或 2.24.1 后,日志记录消失了。 我在文档中没有找到任何有关如何启用此桥接功能的提示。 注意: log4j-1.2-api 和 log4j-jul 的“桥接”功能在 2.24.0 中并未禁用。这些桥仍然开箱即用,可将使用 Log4j 1 或 java.util.logging 编写的日志语句转发到 Log4j 2 API。 被禁用的是使用这些旧版 API 加载和修改日志记录实现的配置的能力。其背后的基本原理是,许多legacy库通过调用j.u.l.Logger.setLevel()或org.apache.log4j.PropertyConfigurator.configure()等方法来破坏用户配置。由于无法修改这些遗留库,因此桥接器的“配置”部分成为选择加入。 问题的可能原因 许多应用程序和库(可能包括您的应用程序和库)都包含与此类似的代码片段: org.apache.log4j.PropertyConfigurator.configure( Main.class.getClassLoader().getResourceAsStream("log4j.properties")); 自从 Log4j 1.0 的第一个稳定版本已经自动加载 log4j.properties 文件并允许用户使用 log4j.configuration 系统属性指定备用位置以来,从未需要过这样的代码片段。此类片段应被删除并替换为以下选项之一: 以本机 Log4j 2 Core 配置格式之一编写配置文件,并将其放置在类路径上的标准位置之一中。这是推荐的方式。 以 Log4j 1 格式编写配置文件并将 log4j.configuration 系统属性指向它。如果您有很多用户并且不想强迫他们使用 Log4j 2 格式,则此选项可能很有用。如果您是唯一配置日志记录的人,则更容易切换到您选择的本机格式。 以 Log4j 1 格式编写配置文件并将 log4j1.compatibility 系统属性设置为 true。 直接在代码中使用 o.a.l.l.core.config.Configurator。 如果您确实想保留代码片段(我不建议这样做),您应该将 log4j1.compatibility 系统属性设置为 true。
如何在 Java 应用程序中使用 Log4j 和 SLF4J 防止重复的日志消息?
我正在开发一个 Java 应用程序,该应用程序使用 SLF4J 进行日志记录,并使用 Log4j 进行底层日志记录实现。该应用程序经常快速连续地记录重复的消息,导致
使用 Log4j2 在反应式 Spring Boot 中根据请求标头动态设置每个请求的 DEBUG 或 INFO 日志记录级别
我正在开发一个使用 Log4j2 作为日志记录框架的反应式 Spring Boot 应用程序。默认情况下,我的应用程序在 INFO 级别进行日志记录,并且我在 application.yml 中设置了日志记录级别 我...
在我的 quarkus java 应用程序中,启动时我从 slf4j 收到以下消息: SLF4J:类路径包含多个 SLF4J 绑定。 SLF4J:在 [jar:file:/C:/Users/.../quarkus-app/li... 中找到绑定...
有没有办法为failsafe/surefire Maven 插件的每个分支编写单独的日志?
我们使用maven-failsafe-plugin与同时运行集成测试,因此我们将在不同进程中拥有多个JVM并行运行测试。 故障安全插件...
@Slf4j 如果类具有“org”字段,则会生成“无法引用非静态变量 org”
为什么,如果我的类有org字段,我就不能使用@Slf4j Lombok日志注释。以下代码将在第 3 行产生编译错误: MyClass.java:[3,1] 非静态变量 org 不能是
使用 slf4j 我可以执行以下操作: logger.atInfo().setMessage("我的消息").addKeyValue("foo", "bar").addKeyValue("code", 42).log() 与 Azure 一起使用时
日志未写入log4j2-spring.xml文件中指定的文件名中
Spring boot版本3.3.3,在我的linux系统中,我将在/opt下有两个tomcat实例,一个名为/opt/tomcat(这是开发环境,在conf/catalina.properties中与spring一起指定。