嘿,我有一个使用 log4j 和 slf4j 进行日志记录的项目。我将日志的布局配置为JsonLayout。是否可以在保留 json 格式的同时记录 JSON 对象。
例如 :
JsonObject object = new JsonObject();
object.addProperty("ID", 3);
LOGGER.info("{}", object);
Run Code Online (Sandbox Code Playgroud)
将输出:
{
"timeMillis" : 1496579005079,
"thread" : "main",
"level" : "INFO",
"loggerName" : "Logger",
**"message" : "{\"ID\":3}",**
"endOfBatch" : false,
"loggerFqcn" : "org.apache.logging.slf4j.Log4jLogger",
"threadId" : 1,
"threadPriority" : 5
}
Run Code Online (Sandbox Code Playgroud)
虽然我需要它来输出:
{
"timeMillis" : 1496579005079,
"thread" : "main",
"level" : "INFO",
"loggerName" : "Logger",
**"message" : {"ID":3},**
"endOfBatch" : false,
"loggerFqcn" : "org.apache.logging.slf4j.Log4jLogger",
"threadId" : 1,
"threadPriority" : 5
}
Run Code Online (Sandbox Code Playgroud) 我尝试将 elasticsearch 客户端从 1.x 升级到当前版本 5.5.2(仅传输层),在修复所有 API 更改后,我遇到了记录器桥的主要问题。
正如文档中所述,我添加了必要的依赖项
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.24</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但我仍然遇到以下异常(详细信息):
Caused by: java.lang.NoSuchMethodError: org.apache.logging.log4j.Logger.debug(Ljava/lang/String;Ljava/lang/Object;)V
at org.elasticsearch.threadpool.ThreadPool.<init>(ThreadPool.java:203)
at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:129)
at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:265)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:130)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:116)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:106)
at net.my-local-stuff.nia.NiaApplication.esClient(NiaApplication.java:168)
Run Code Online (Sandbox Code Playgroud)
在升级之前,我将 logback 作为记录器,并且它仍然由我自己的代码中的 slf4j 外观拉动(显然它不会在 elasticsearch 的代码中拉动)。
如果有人想查看依赖树的要点。对我来说,似乎所有必要的依赖项都在那里。
关于日志记录的所有内容似乎最终都出现在一个未找到的类中(虽然我以某种方式获得了一个记录器实例,但该记录器实例没有所有方法。:-()。
非常感谢弗里克的帮助
我想使用 lombok + @slf4j 在我的类中添加一个额外的记录器。目前,我正在使用 @Slf4j 它创建
私有静态最终org.slf4j.Logger日志= org.slf4j.LoggerFactory.getLogger(LogExample.class)。
我将其用于标准日志记录,我想为类中的特定日志记录创建另一个记录器。
private static final Logger testLog = LoggerFactory.getLogger(LogExample.class.getName()+".TestLog")
将特定日志输出到单独的文件。这是手动进行的。如何使用 lombok @Slf4j 进行配置
我正在将 spring 应用程序转换为 spring-boot,使用 boot-starter-parent 版本:2.0.4.RELEASE。当我使用 mvn install 构建时,它运行良好,但是当我尝试使用命令运行应用程序时:mvn spring-boot:run -Dspring.profiles.active=dev,我收到此异常: ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
以下是我的 pom 中的依赖项:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.0-alpha4</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.3.0-alpha4</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
我尝试遵循此问题的建议,并使用新旧版本的 logback(核心和经典)依赖项,并添加“slf4j-log4j12”和“slf4j-simple”,但仍然出现异常。堆栈跟踪是:
java.lang.NoClassDefFoundError:org/slf4j/impl/StaticLoggerBinder 在 org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext (LogbackLoggingSystem.java:285) 在 org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize (LogbackLoggingSystem) .java:102) 在 org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent (LoggingApplicationListener.java:191) 在 org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent (LoggingApplicationListener.java:170) 在 org. springframework.context.event.SimpleApplicationEventMulticaster.invokeListener (SimpleApplicationEventMulticaster.java:167) 在 org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent (SimpleApplicationEventMulticaster.java:139) 在 org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent (SimpleApplicationEventMulticaster. java:122)在org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:68)在org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:48)在org.springframework.boot.SpringApplication .run (SpringApplication.java:316) 在 org.springframework.boot.SpringApplication.run (SpringApplication.java:1258) 在 …
我正在使用 log4j2 在 Wildfly 服务器(Jboss 8)上记录我的应用程序。
我想要为我的日志定制一个颜色编码,当我在控制台/终端上看到日志时,它工作得非常好。
以下是模式:
log4j.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Routing name="Routing">
<Routes pattern="$${ctx:logFileName}">
<Route>
<RollingFile name="RollingFile" fileName="standalone/log/platform-${ctx:logFileName}.log" filePattern="standalone/log/platform-${ctx:logFileName}-%d{MM-dd-yyyy}.log.gz" append="true">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{id}] %style{[%X{logFileName}}{magenta}] [%t] %highlight{[%-5level]}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=green, DEBUG=green bold, TRACE=magenta} %style{%c{1}:%L}{cyan} - %highlight{%msg%n%throwable}{INFO=white,TRACE=magenta}"/>
.....
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在 vi 或 gedit 等文本编辑器中打开日志文件时,我收到未知字符,例如:
[32m15:56:30.536 DEBUG com.syn.test.Test.main() @15 - this is debug message
[m[32m15:56:30.539 DEBUG com.syn.test.Test.main() @19 - this is debug messge
[m
Run Code Online (Sandbox Code Playgroud)
我知道颜色编码在文本编辑器上不起作用,但如何在编辑器中不包含未知字符,并且还能够在控制台中看到颜色编码。
我有一个使用 Java 9 的 Maven 项目,并且正在使用模块。Logback 似乎从 1.3.0-alpha1 版本开始就支持这一点,但不幸的是我没有让它工作。
我从 SLF4J 收到以下消息:
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
Run Code Online (Sandbox Code Playgroud)
貌似找不到Logback。并使用检查(由 Jlink 生成)工件,jimage list .../modules除了 logback.xml 配置文件之外,我找不到任何有关 logback 的信息。
也许问题出在我的 module-info.java 中:
open module my.super.app {
requires jackson.annotations;
requires jdk.jsobject;
requires com.fasterxml.jackson.databind;
requires com.fasterxml.jackson.core;
requires javafx.graphics;
requires javafx.controls;
requires org.slf4j;
exports my.super.app;
}
Run Code Online (Sandbox Code Playgroud)
如何以及在哪里声明使用 Java 9 模块依赖 Logback?
有谁知道记录异常和结构化参数的最佳实践是什么?查看https://github.com/logstash/logstash-logback-encoder#customizing-stack-traces,建议不要使用它们,但没有提供替代方案。
kafka 监听消息之前/之后是否有任何类型的钩子可用?
使用案例:必须设置 MDC 关联 ID 才能执行日志可追溯性
我在寻找什么?之前/之后回调方法,以便可以在进入时设置 MDC 关联 ID,并最终在退出时清除 MDC。
编辑后的场景: 我将关联 id 作为 Kafka 标头的一部分,并且我想在 Kafka 监听器中收到消息后立即在 MDC 中进行设置
感谢您的帮助
我无法让 Hibernate 记录 SQL 查询的 LIMIT 部分。常规参数绑定按预期记录,只有 LIMIT 值绑定不记录。
代码相当简单:
TypedQuery<UserEntity> query = entityManager
.createQuery("SELECT u from UserEntity u WHERE u.email LIKE :domain", UserEntity.class);
query.setParameter("domain", "%test%");
query.setFirstResult(startIndex);
query.setMaxResults(count);
List<UserEntity> users = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
这会生成以下日志。如您所见,常规参数绑定的记录没有问题,但没有限制绑定的日志行。
Hibernate:
select
userentity0_.id as id1_53_,
userentity0_.created_at as created_2_53_,
userentity0_.dob as dob3_53_,
userentity0_.email as email4_53_,
userentity0_.fullname as fullname5_53_,
userentity0_.mobile as mobile6_53_,
userentity0_.product_id as product_7_53_
from
user_entity userentity0_
where
userentity0_.email_id like ? limit ?
TRACE o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [%test%]
Run Code Online (Sandbox Code Playgroud)
我已经进行了广泛的搜索,似乎没有一个常规属性值可以解决这个问题,并且似乎没有其他问题针对这个确切的问题
可能相关的细节:
我们正在研究spring项目并spring-kafka最近整合。它按预期工作,我们能够正确地生成和使用消息。
但是,当我们将项目转移到PROD时,我们收到了DEBUG级别的日志语句,并且语句数量已不堪重负。我们正在尝试将Kafka 日志的日志记录级别设置为 WARN 或 ERROR。
在过程中,我们logback.xml按照下面的文章添加(添加在主/资源中)但没有运气,还尝试了我们在互联网上遇到的其他解决方案。(添加log4j.properties和log4j2.xml)
日志记录文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration name="default">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.apache.kafka" level="error" />
<logger name="org.apache.kafka.common.metrics" level="error"/>
<logger name="org.apache.kafka.clients" level="error"/>
<logger name="org.apache.kafka.clients.consumer.internals" level="error"/>
<logger name="org.apache.kafka.clients.consumer.internals.Fetcher" level="error"/>
<root level="error" name="org.apache.kafka" additivity="false">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
示例日志:
[org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1] INFO org.apache.kafka.clients.Metadata - [Consumer clientId=client-01, groupId=publisher] Cluster ID: Udhjf-fdbfds
[org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1] INFO …Run Code Online (Sandbox Code Playgroud) slf4j ×10
java ×8
logging ×4
apache-kafka ×2
log4j ×2
logback ×2
spring ×2
spring-boot ×2
spring-kafka ×2
hibernate ×1
java-9 ×1
java-module ×1
json ×1
log4j2 ×1
lombok ×1
mdc ×1