标签: slf4j

使用 log4j JsonLayout 记录 JSON 对象

嘿,我有一个使用 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)

java logging json log4j slf4j

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

logger.debug() NoSuchMethodError Spring-Boot 与 Elasticsearch 客户端 5.5.2

我尝试将 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 的代码中拉动)。

如果有人想查看依赖树的要点。对我来说,似乎所有必要的依赖项都在那里。

关于日志记录的所有内容似乎最终都出现在一个未找到的类中(虽然我以某种方式获得了一个记录器实例,但该记录器实例没有所有方法。:-()。

非常感谢弗里克的帮助

java logback slf4j elasticsearch spring-boot

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

slf4j + lombok + 附加记录器

我想使用 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 进行配置

java slf4j lombok

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

ClassNotFoundException:org.slf4j.impl.StaticLoggerBinder

我正在将 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) 在 …

logging slf4j spring-boot logback-classic spring-logback

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

Log4j2 突出显示模式在文本编辑器中不起作用?

我正在使用 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 logging log4j slf4j log4j2

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

Java 9 模块化应用程序中的 Logback 不起作用

我有一个使用 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?

java logback slf4j java-9 java-module

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

将异常与结构化参数一起记录

有谁知道记录异常和结构化参数的最佳实践是什么?查看https://github.com/logstash/logstash-logback-encoder#customizing-stack-traces,建议不要使用它们,但没有提供替代方案。

java slf4j logstash-logback-encoder

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

卡夫卡监听器中的钩子

kafka 监听消息之前/之后是否有任何类型的钩子可用?

使用案例:必须设置 MDC 关联 ID 才能执行日志可追溯性

我在寻找什么?之前/之后回调方法,以便可以在进入时设置 MDC 关联 ID,并最终在退出时清除 MDC。

编辑后的场景: 我将关联 id 作为 Kafka 标头的一部分,并且我想在 Kafka 监听器中收到消息后立即在 MDC 中进行设置

感谢您的帮助

spring slf4j mdc apache-kafka spring-kafka

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

在 Hibernate 中记录 SQL 查询限制

我无法让 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)

我已经进行了广泛的搜索,似乎没有一个常规属性值可以解决这个问题,并且似乎没有其他问题针对这个确切的问题

可能相关的细节:

  • 休眠 5.4.27.Final
  • 方言 …

java logging hibernate slf4j

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

spring kafka - 手动设置消费者日志级别(spring 5)

我们正在研究spring项目并spring-kafka最近整合。它按预期工作,我们能够正确地生成和使用消息。

但是,当我们将项目转移到PROD时,我们收到了DEBUG级别的日志语句,并且语句数量已不堪重负。我们正在尝试将Kafka 日志的日志记录级别设置为 WARN 或 ERROR。

在过程中,我们logback.xml按照下面的文章添加(添加在主/资源中)但没有运气,还尝试了我们在互联网上遇到的其他解决方案。(添加log4j.propertieslog4j2.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)

java spring slf4j apache-kafka spring-kafka

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