当前位置: 首页 > 知识库问答 >
问题:

如何将slf4j-over-logback日志编写为JSON

商宝
2023-03-14

我的代码中有以下日志记录语句。

import org.slf4j.Logger;

public class MySampleClass {

private static final Logger logger = LoggerFactory.getLogger(MySmapleClass.class);

    public void mySampleMethod(List<String> userID) {
        logger.debug("userRuntimeId =" + userId);
        .
        .
        .
        Business Logic
        .
        .

    }
}

这将打印我的日志,如下所示,

2019-02-25 16:27:45,460调试[fileTaskExecutor-2][A.abc.MySampleApp.Handlers.UserRecordHandler][MY_SAMPLE_APP][Vijay-20190225-162738.Trigger][]userRuntimeId=3051AA39-2E0A-11E9-Bee3-E7388CJG5LE0

我希望示例JSON格式:

{
timestamp="2019-02-25 16:27:45,460" ,
level="DEBUG",
triggerName="fileTaskExecutor-2",
className="a.abc.mySampleApp.handlers.userRecordHandler",
appName="MY_SAMPLE_APP",
userRuntimeId="3051aa39-2e0a-11e9-bee3-e7388cjg5le0"
}

共有1个答案

陶鸿畴
2023-03-14

您可以在任何日志添加器中使用logback-contrib的JSONLayout。例如:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
        <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
            <prettyPrint>false</prettyPrint>
        </jsonFormatter>
        <timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
        <appendLineSeparator>true</appendLineSeparator>
        <includeContextName>false</includeContextName>
    </layout>
</appender>

使用该配置,以下日志调用...

logger.info("hello!");

...会发出:

{
  "timestamp" : "2019-03-01 08:08:32.413",
  "level" : "INFO",
  "thread" : "main",
  "logger" : "org.glytching.sandbox.logback.LogbackTest",
  "message" : "hello!"
}
    null
 类似资料:
  • 我决定使用slf4j而不是Java自己的日志记录。我已经成功地使用SLF4J登录到控制台。但我不知道如何将其写入日志文件。日志文件将帮助我们收集运行时可能出现的错误。 我通过这样做来实现slf4j, 私有静态最终org.slf4j.LOGGER LOGGER=org.slf4j.loggerfactory.getlogger(class1.class); PropertyConfigurator.

  • 我在我的应用程序中使用Jetty http客户端。我也在使用带有logback的SLF4J。 如何将Jetty的总体日志记录级别设置为Info?

  • 我在具有以下logback.xml文件的类路径中有slf4j和logback jar(该文件以前已经成功使用过)。但是,DOCX4J3.0仍然将日志记录信息打印到标准输出。我正在使用NetBeans7.4构建基于docx4j的应用程序。我想将日志级别更改为错误,并将其发送到日志文件中。不知道我错过了什么。任何帮助都是非常感谢的。

  • 问题内容: 我正在使用slf4j api进行记录的应用程序: (上面的代码显示了正在使用的类和程序包,但是很标准。) 我们使用配置如下的logback: 我们的某些代码利用了使用java.util.logging记录的第三方库- 特别是freemarker。从下面的控制台日志条目中可以看到,logback和jul都正在记录到控制台,但是它们没有使用相同的配置(logback条目使用我们的模式,ju

  • 我们目前正在将几个Grails(2.4.4)应用程序部署到一个Tomcat7服务器上,并且已经完全按照这里所描述的tomcat-SLF4j-logback配置了日志记录。 我们希望通过一个logback.xml文件配置所有grails应用程序,并将所有应用程序记录到一个文件中,但按照grails的application.properties中定义的应用程序名称区分日志消息: 我们的logback.

  • 因此,我正在部署一个使用Hibernate4.3.6的web应用程序。和Tomcat 7。我正在尝试使用SLF4J作为日志抽象层来日志。但是,我有很多问题和疑问。首先,Hibernate和Tomcat都有不同的日志框架,分别是jboss-logging和juli(即使我在库中找不到juli),所以我认为我必须安装从这些框架到SLF4J的桥梁。对于Hibernate,根据这个答案,一个解决方案可以是