当我启动任何应用程序时,我会在控制台和日志中收到很多这样的行:
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class com.example.auth.api.SessionAgentImpl
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class com.example.api.AbstractCloseableAgent
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class com.example.api.AbstractCentral
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class com.example.api.AbstractCloseHooksHandler
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class com.example.core.api.plugins.AbstractCorePlugin
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class com.example.config.api.ConfigImpl
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class com.example.api.AbstractCentral
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class com.example.api.AbstractCloseHooksHandler
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class com.example.api.AbstractCloseableAgent
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class com.example.api.AbstractCentral
Run Code Online (Sandbox Code Playgroud)
然后这些行一次又一次出现在日志中。它是在将 log4j 版本更新到 2.15.0 及更高版本后开始的。
有遇到过吗?
我正在尝试将 .jar 项目转换为本机映像,因为我需要在不支持 Java 的设备中运行它。为此,我安装了 GraalVM 和所有必需的依赖项,并且本机映像构建工作完美(或者至少看起来如此,因为它在过程中没有给出任何错误)。
我用于构建的命令是:
/usr/lib/jvm/graalvm/bin/native-image -jar MyApp.jar MyApp --enable-http --enable-https --no-fallback -H:+ReportExceptionStackTraces
问题是,当我尝试运行本机文件时,出现异常,提示找不到 log4j 类,因此在执行期间没有应用程序日志:
log4j:ERROR Could not instantiate class [org.apache.log4j.RollingFileAppender].
java.lang.ClassNotFoundException: org.apache.log4j.RollingFileAppender
at java.lang.Class.forName(DynamicHub.java:1338)
at java.lang.Class.forName(DynamicHub.java:1313)
at org.apache.log4j.helpers.Loader.loadClass(Loader.java:198)
at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:327)
at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:124)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:785)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
at org.slf4j.impl.Log4jLoggerFactory.<init>(Log4jLoggerFactory.java:66)
at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:72)
at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:45)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
at com.test.MyApp.<clinit>(MyApp.java:40)
log4j:ERROR Could not instantiate appender named "file".
log4j:WARN No appenders could …Run Code Online (Sandbox Code Playgroud) 我正在使用 springBootVersion = '3.0.2' 和 Java 17。最近我已升级到 springBoot 3 和 Java 17。我的 build.gradle 文件如下
implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
implementation (group: 'ch.qos.logback.contrib', name: 'logback-json-classic', version: '0.1.5'){
exclude group: 'org.json', module: 'json'
}
implementation (group: 'ch.qos.logback.contrib', name: 'logback-jackson', version: '0.1.5'){
exclude group: 'org.json', module: 'json'
}
implementation group: 'ch.qos.logback', name: 'logback-core', version: '1.2.9'
Run Code Online (Sandbox Code Playgroud)
在 ./gradlew clean build 上,我收到测试失败并出现以下错误。
Caused by: java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing …Run Code Online (Sandbox Code Playgroud) 嗯,我认为标题描述了这个问题。我知道spring-boot-starter-log4j2如果我想在 spring 中使用 log4j2 作为我的日志框架,我应该使用它。但我的问题是,它与普通的 org.apache.logging.log4j:log4j-api 有什么不同?
查看 的编译时依赖性spring-boot-starter-log4j2,它具有log4j-slf4j2-impl. 这是否意味着它在 log4j2 实现之上使用 SLF4J 接口?我仍然可以使用 SLF4J 中不可用的 log4j2 特定功能吗?
如果上一个问题的答案是否定的,有什么方法可以配置我的依赖项,以便我可以使用所有 log4j2 功能?因为在我阅读了这个问题的答案:Is it值得使用 slf4j 与 log4j2 后,我得出的结论是最好直接编码到 log4j2 API。
谢谢。
SLF4J抱怨多个绑定,但看起来完全一样:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [zip:C:/bea_domains/my_service_domain/servers/AdminServer/tmp/_WL_user/my-shared-app-lib/obaz3z/APP-INF/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [zip:C:/bea_domains/my_service_domain/servers/AdminServer/tmp/_WL_user/my-shared-app-lib/obaz3z/APP-INF/lib/slf4j-log4j12-1.6.1.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)
有没有办法摆脱这个警告?可能是什么原因呢?
运行jetty-maven-plugin时出现此错误:
[INFO] --- jetty-maven-plugin:7.6.1.v20120215:start (start-jetty) @ rest ---
log4j:WARN No appenders could be found for logger (org.eclipse.jetty.util.log).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Run Code Online (Sandbox Code Playgroud)
该项目是一场包含log4j.properties的战争WEB-INF/classes.
我也将以下属性传递给插件,只是为了看看发生了什么(特定的log4j.properties文件也存在于下面的位置):
<!-- Log4J settings -->
<systemProperty>
<name>log4j.configuration</name>
<value>file://${project.build.testOutputDirectory}/log4j.properties</value>
</systemProperty>
<systemProperty>
<name>log4j.debug</name>
</systemProperty>
Run Code Online (Sandbox Code Playgroud)
登录webapp工作正常.但是,我对这个错误感到困惑.
我在项目中有这些依赖项:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-core</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
另外,当测试(需要Jetty)开始运行时,我看到以下输出:
log4j: Using URL [file:/project/foo/rest/target/test-classes/log4j.properties] for automatic log4j configuration.
log4j: Reading configuration from URL file:/project/foo/rest/target/test-classes/log4j.properties
log4j: Parsing for [root] with value=[ERROR, …Run Code Online (Sandbox Code Playgroud) 我在logback.xml中有这个appender
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>logFile.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>5</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} - %msg%n</Pattern>
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="FILE" />
</root>
Run Code Online (Sandbox Code Playgroud)
所以目前我将所有日志保存到一个文件中.我怎么能这样,一个文件只保存错误日志而其他文件保存所有其他文件?
我想在我的代码中只使用一个logger实例,如下所示:
private static final Logger log = LoggerFactory.getLogger(Main.class);
Run Code Online (Sandbox Code Playgroud) 我配置了我的机器zookeeper,nimbus,supervisor正常运行,我的拓扑在LocalCluster中工作
LocalCluster cluster = new LocalCluster();
cluster.submitTopology("SendPost", conf, builder.createTopology());
Utils.sleep(10000000000l);
cluster.killTopology("SendPost");
cluster.shutdown();
Run Code Online (Sandbox Code Playgroud)
现在我想尝试提交我的拓扑结构但它不起作用
/usr/local/storm/bin$ ./storm jar /home/winoria/Desktop/Storm/storm-starter/target/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar com.winoria.post.PostTopology Post
Run Code Online (Sandbox Code Playgroud)
我得到以下错误
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/storm/lib/logback-classic-1.0.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/winoria/Desktop/Storm/storm-starter/target/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Running: java -client -Dstorm.options= -Dstorm.home=/usr/local/storm -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dstorm.conf.file= -cp /usr/local /storm/storm-netty-0.9.0.1.jar:/usr/local/storm/storm-console-logging-0.9.0.1.jar:/usr/local/storm/storm-core-0.9.0.1.jar:/usr/local/storm/lib/httpcore-4.1.jar:/usr/local/storm/lib/carbonite-1.5.0.jar:/usr/local/storm/lib/mockito-all-1.9.5.jar:/usr/local/storm/lib/commons-io-1.4.jar:/usr/local/storm/lib/commons-fileupload-1.2.1.jar:/usr/local/storm/lib/jgrapht-0.8.3.jar:/usr/local/storm/lib/ring-jetty-adapter-0.3.11.jar:/usr/local/storm/lib/jzmq-2.1.0.jar:/usr/local/storm/lib/asm-4.0.jar:/usr/local/storm/lib/logback-core-1.0.6.jar:/usr/local/storm/lib/tools.nrepl-0.2.3.jar:/usr/local/storm/lib/compojure-1.1.3.jar:/usr/local/storm/lib/json-simple-1.1.jar:/usr/local/storm/lib/ring-devel-0.3.11.jar:/usr/local/storm/lib/commons-logging-1.1.1.jar:/usr/local/storm/lib/httpclient-4.1.1.jar:/usr/local/storm/lib/reflectasm-1.07-shaded.jar:/usr/local/storm/lib/commons-exec-1.1.jar:/usr/local/storm/lib/guava-13.0.jar:/usr/local/storm/lib/clout-1.0.1.jar:/usr/local/storm/lib/objenesis-1.2.jar:/usr/local/storm/lib/slf4j-api-1.6.5.jar:/usr/local/storm/lib/clojure-1.4.0.jar:/usr/local/storm/lib/jetty-6.1.26.jar:/usr/local/storm/lib/hiccup-0.3.6.jar:/usr/local/storm/lib/clj-stacktrace-0.2.2.jar:/usr/local/storm/lib/log4j-over-slf4j-1.6.6.jar:/usr/local/storm/lib/tools.logging-0.2.3.jar:/usr/local/storm/lib/ring-core-1.1.5.jar:/usr/local/storm/lib/zookeeper-3.3.3.jar:/usr/local/storm/lib/math.numeric-tower-0.0.1.jar:/usr/local/storm/lib/disruptor-2.10.1.jar:/usr/local/storm/lib/minlog-1.2.jar:/usr/local/storm/lib/core.incubator-0.1.0.jar:/usr/local/storm/lib/servlet-api-2.5-20081211.jar:/usr/local/storm/lib/netty-3.6.3.Final.jar:/usr/local/storm/lib/ring-servlet-0.3.11.jar:/usr/local/storm/lib/clj-time-0.4.1.jar:/usr/local/storm/lib/snakeyaml-1.11.jar:/usr/local/storm/lib/commons-codec-1.4.jar:/usr/local/storm/lib/tools.cli-0.2.2.jar:/usr/local/storm/lib/logback-classic-1.0.6.jar:/usr/local/storm/lib/servlet-api-2.5.jar:/usr/local/storm/lib/kryo-2.17.jar:/usr/local/storm/lib/joda-time-2.0.jar:/usr/local/storm/lib/curator-client-1.0.1.jar:/usr/local/storm/lib/libthrift7-0.7.0-2.jar:/usr/local/storm/lib/tools.macro-0.1.0.jar:/usr/local/storm/lib/jline-0.9.94.jar:/usr/local/storm/lib/clojure-complete-0.2.3.jar:/usr/local/storm/lib/curator-framework-1.0.1.jar:/usr/local/storm/lib/commons-lang-2.5.jar:/usr/local/storm/lib/junit-3.8.1.jar:/usr/local/storm/lib/jetty-util-6.1.26.jar:/home/winoria/Desktop/Storm/storm-starter/target/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar:/usr/local/storm/conf:/usr/local/storm/bin -Dstorm.jar=/home/winoria/Desktop/Storm/storm-starter/target/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar com.winoria.post.PostTopology Post
SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError.
SLF4J: See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details.
Exception in thread "main" java.lang.ExceptionInInitializerError …Run Code Online (Sandbox Code Playgroud) 有没有办法通过slf4j传递适用于当前日志事件的更多信息?可以通过MDC存储和访问基于请求的信息,如用户,IP地址或应用程序名称.稍后我可以在布局或转换器中访问该信息,而不必解析日志消息.如果我使用基于JSON的格式,我有另一个字段,"appName":myApp如果我在plaint文本中使用log4j登录,我可以通过%{appName}符号访问它.有没有办法通过适用于一个日志事件的信息来实现这一目标?例如,我想传递一个异常ID(即使是我不拥有的异常).最好但仍然难看的解决方案是将id传递给MDC,记录异常并在之后删除它.有谁知道更好的解决方案?
我们使用常春藤来管理一个多项目的Java应用程序,最近在构建时就开始显示此错误。是什么原因造成的?