我正在尝试在我的 Apache Camel 项目中进行日志记录。我已经尝试过以下方法:
VM args 在 Eclipse 中,我添加了以下 VM args: -Dlog4j.configuration=log4j-/resources/log4j.properties -Dlog4j.debug=true
类路径上的属性文件 我已仔细检查 log4j.properties 是否在类路径上
我的java看起来像这样:
Logger LOG = LoggerFactory.getLogger(CamelMain.class);
LOG.info("starting");
Run Code Online (Sandbox Code Playgroud)
我的 pom 包含以下内容:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-beanio</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
任何想法为什么日志记录不起作用?
更新/解决方案
我需要添加以下内容:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud) 我在 Tomcat 7 上运行的 java Web 应用程序的资源文件夹中有一个。logback.xml有没有办法在应用程序运行时动态更改应用程序某些类的调试级别?
标准做法是从 CLI 运行一个普通的 java jar,只需logback.xml使用 vim 进行编辑,一段时间后日志就会更新。这对于 tomcat 是否可行,因为我尝试过,但 id 似乎不起作用。
还有更好的办法吗?
我工作的应用程序将创建为 jar 文件并通过命令行运行它。不涉及应用程序服务器。当我运行 jar 文件时,来自 logback 的信息会打印在控制台上。如何抑制 logback 包中的所有日志记录
13:46:30,534 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
13:46:30,534 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
13:46:30,534 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/Users/util/target/classes/logback.xml]
13:46:30,588 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
13:46:35,598 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
13:46:35,605 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
13:46:35,621 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] …Run Code Online (Sandbox Code Playgroud) 我的日志依赖项目前如下所示:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.9.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我注意到commons-logging.jar由于某种原因它仍然在我的类路径中。我应该排除它还是不会引起任何问题?
到目前为止我没有注意到任何问题,但我仍然想知道那个罐子是否仍然会以某种方式引起问题。
我知道针对基本相同的错误发布了多个问题。但是,我不认为它们与我的问题相同。
简而言之,我正在尝试编译 oci-java-sdk 附带的示例之一。它无法编译。看起来像一个 jar 文件左右有 LOG 变量,所以我想知道在哪里可以找到该 jar 文件。
详细信息如下。首先,我使用 Oracle Linux,并使用 RPM 安装了 oci-java-sdk。接下来,我将整个示例目录复制到我的主目录。我的 CLASSPATH 如下所示:
$ echo $CLASSPATH
:/usr/lib64/java-oci-sdk/lib/oci-java-sdk-full-1.6.1.jar:/usr/lib64/java-oci-sdk/third-party/lib/*
Run Code Online (Sandbox Code Playgroud)
根据我工作的需要,我尝试构建如下示例:
$ javac -Xlint -cp $CLASSPATH:$PWD/lombok.jar:/usr/share/java/*:/usr/share/java/slf4j/* ./EventsServiceExample.java
Run Code Online (Sandbox Code Playgroud)
如上所示,我是lombok.jar从lombok项目网站下载的。命令javac失败如下:
$ javac -Xlint -cp $CLASSPATH:$PWD/lombok.jar:/usr/share/java/*:/usr/share/java/slf4j/* ./EventsServiceExample.java
./EventsServiceExample.java:83: error: cannot find symbol
LOG.info("Number of rules in compartment {} is {}", compartmentId, rulesList.size());
^
symbol: variable LOG
location: class EventsServiceExample
./EventsServiceExample.java:135: error: cannot find symbol
LOG.info(
^
symbol: variable LOG
location: class EventsServiceExample
./EventsServiceExample.java:143: error: cannot find symbol …Run Code Online (Sandbox Code Playgroud) Spring Boot 应用程序的 logback 是否支持 OWSAP ESAPI 日志记录?我做了很多研究,但对此找不到太多。我发现org.owasp.esapi在这个PR之后现在支持这个。但这意味着我将不得不取消 logback。有没有一种方法可以使用 logback 实现 OWSAP ESAPI 日志记录?我们正在使用slf4jlogback 提供的记录器。
我查看了 logback 的 maven页面,自 2017 年以来没有任何重大版本。所以我猜测 logback 不支持 OWSAP ESAPI 日志记录。如果我错了,请纠正我。如果是这种情况,我可以使用其他替代方案吗?
另外根据这个spring-boot 不支持 slf4j 1.8 及以上版本。如果是这种情况,我可以使用其他替代方案吗?
我正在尝试将 Helidon MP 应用程序中的 slf4j 日志消息发送到在端口 9092 上运行的 Kafka 服务器。我有以下类作为示例:
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Service {
private final ConfigProvider configProvider;
@Inject
public Service(ConfigProvider configProvider) {
this.configProvider = configProvider;
}
public String getString() {
String msg = String.format("%s %s !", configProvider.getString());
log.info("Entered getString() method");
return msg;
}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个logging.xml文件,它将Appender指定为KafkaAppender:
<Configuration>
<Appenders>
<Kafka name="KafkaAppender" topic="app-logs"
syncSend="false">
<Property name="bootstrap.servers"
value="localhost:9092"/>
</Kafka>
</Appenders>
<Loggers>
<Logger name="org.apache.kafka" level="WARN"/> <!-- avoid recursive logging -->
<Root level="INFO">
<AppenderRef ref="KafkaAppender"/>
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
但是,当我运行该应用程序时,出现以下错误:
2022-11-28 14:23:17,358 main …Run Code Online (Sandbox Code Playgroud) 我有一个项目结构为
myproject/
moduleA/
moduleB/
moduleC/
Run Code Online (Sandbox Code Playgroud)
myproject有pom.xml作为
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.3</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
现在moduleC需要moduleB代码,因此它将依赖项引用为
<dependency>
<groupId>com.org.myproject</groupId>
<artifactId>moduleB</artifactId>
<version>${project.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但是当我执行课程时moduleC,它会抱怨
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
......
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
Run Code Online (Sandbox Code Playgroud)
当我的moduleC类执行moduleB代码时会发生这种情况
我做错了什么?我怎样才能解决这个问题?
我正在阅读有关使用java进行日志记录的信息并且遇到了这一点:在此处输入链接描述
它讨论了slf4j的一个优点:
可以在部署时选择他的日志框架==>可以在部署时插入所需的日志框架在类路径上插入适当的jar文件(绑定).有人可以向我解释为什么以及我们需要它的地方?
当我在一个独立的tomcat容器中启动我的webapp时,我看到Flyway日志记录正常(如果找到则使用commons-logging,如下面的Axel所述,则使用sout).
但是,当我使用apache tomcat maven插件(tomcat7-maven-plugin)时,我看到以下内容:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Run Code Online (Sandbox Code Playgroud)
没什么好看的.这是完整的代码:
public void contextInitialized(ServletContextEvent sce) {
Flyway flyway = new Flyway();
flyway.setDataSource(...);
flyway.migrate();
}
<listener>
<listener-class>com.blah.conf.FlywayListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)
我正在使用logback-classic进行日志记录.泽西和吉斯都记录正常(虽然我删除它们以缩小问题范围).
这是我在类路径中看到的唯一与日志相关的jar:
logback-classic-1.0.13
logback-core-1.0.13
slf4j-api-1.7.5
Run Code Online (Sandbox Code Playgroud)
这是slf4j的依赖树:
mvn dependency:tree -Dverbose -Dincludes=org.slf4j
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ hello ---
[INFO] com.hello:hello:war:1.0-SNAPSHOT
[INFO] \- ch.qos.logback:logback-classic:jar:1.0.13:compile
[INFO] \- org.slf4j:slf4j-api:jar:1.7.5:compile
Run Code Online (Sandbox Code Playgroud)
所以我更新的问题是,为什么使用tomcat maven插件vs独立存在差异?我没有在"target"文件夹中看到临时部署的任何其他jar.
更新:添加jcl-over-slf4j后,问题就消失了.