`
qindongliang1922
  • 浏览: 2187960 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117630
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126036
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59985
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71374
社区版块
存档分类
最新评论

如何使log4j生成json格式的log

    博客分类:
  • ELK
阅读更多
使用java开发项目时,log日志一般都是应用程序必不可少的一部分,大部分情况下我们的log文件都是普通的文本信息,通过level来标记不同级别的日志。


日志的目的,主要还是为了出现问题时有追踪的途径,方便从里面查出原因,在数据量小的时候通过linux上的各种shell命令如awk,grep就能快速查询或者做一些简单的统计,当数据量的时候,而且程序本身还是分布式的时候,这种方式就有点费劲。比如你有10台机器,你需要登录每台查询,是非常繁琐的,而且数据量大的时候linux命令可能效率非常低。所以这个时候我们就必要使用专门的日志分析工具来处理了,推荐使用ELK套件,对日志查询分析统计非常擅长,最重要是开源的。


ElasticSearch支持标准的json结构的数据,直接构建索引,但大多数时候我们的log文件都是普通文本,没办法直接插入es里面,除非中间使用logstash在转化一下,才能插入,但这样我们就需要维护多套logstash规则,也比较繁琐,理想的情况下,就是生成的log直接就是json格式的,这样通过logstash直接插入es即可,不需要关注具体的业务字段,这样就比较灵活。



在log4j中是没有直接对应的json的layout,这里解释一下layout,layout是日志组件里面渲染最终结果为字符串的一个类,如果我们需要自定义格式,那么就需要继承layout这个类,然后重写format方法,来完成最终的日志输出格式。

log4j直接是不支持json格式的,不过logstash官网已经提供了支持项目jsonevent-layout,虽然已经好几年没更新了,但简单的凑合还能用。功能就是将log4j的打印信息转成json格式,这样通过logstash就直接能插入es里面,如何使用?

github:https://github.com/logstash/log4j-jsonevent-layout

先在maven里面引入下面的pom依赖:
<!-- https://mvnrepository.com/artifact/net.logstash.log4j/jsonevent-layout -->
<dependency>
    <groupId>net.logstash.log4j</groupId>
    <artifactId>jsonevent-layout</artifactId>
    <version>1.7</version>
</dependency>




然后在log4j.properties简单配置即可:
#log4j.rootLogger=INFO,console,kafka
log4j.rootLogger=INFO,console

# appender console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=net.logstash.log4j.JSONEventLayout


最终打印的log格式如下:
{"@timestamp":"2017-09-15T09:08:50.805Z","source_host":"USER-20160722CY","file":"TestJson.java","method":"main","level":"INFO","line_number":"39","thread_name":"main","@version":1,"logger_name":"TestJson","message":"log信息","class":"net.logstash.log4j.TestJson","mdc":{}}


上面的log除了是标准的json格式外,还有ELK里面特需的时间戳字段@timestamp,注意这个字段必须得有而且格式必须是es支持的格式,只有这样才能直接经过logstash插入到es里面。



总结:

虽然使用logstash官网的jsonevent-layout能够直接将log4j的输出信息转换成json,但是缺点是不能够支持自定义的字段加入到json中,比如我在log.info()方法里面传入一个Map类里面的kv都需要在json里面生成,或者直接在info方法里面传入一个JSON对象,有时候我们的应用程序需要设置特定的字段加入到json,便于后续的针对性的统计分析,比如说我有一个方法耗时的字段,目前来看jsonevent-layout是不满足的,所以还需要我们自定义一个layout来实现这样的功能,这个在后面的文章会分享出来。



0
0
分享到:
评论

相关推荐

    log4j-jsonlayout

    总结,`log4j-jsonlayout`是一个用于Log4j1的日志布局组件,它将日志信息转换为JSON格式,增强了日志的可读性和机器可处理性,适应于现代日志管理和分析的需求。理解和运用JSONLayout有助于提升日志系统的效能和开发...

    log4j json ezmoph

    综上所述,"Log4j JSON ezmoph"是一个针对IBM Jazz和OSLC环境的日志处理方案,它结合了Log4j的强大日志框架、JSON的数据交换格式以及ezmoph的转换能力,以生成结构化日志,便于系统监控和问题诊断。在实际应用中,...

    log4j-json:Alfresco 的 Json 格式日志

    以json格式输出应用程序日志 作者:史蒂夫·里格比 ... log4j.appender.Json=org.apache.log4j.FileAppender log4j.appender.Json.File=${logfilename}.json log4j.appender.Json.layout=net.logstash.

    Log4j2、Fastjson、Log4j的BurpSuite插件亲测有效

    Log4j是Apache的一个开源项目,主要用于日志记录,提供了灵活的日志配置,允许开发者根据需求调整日志输出的级别和格式。Log4j2作为Log4j的升级版本,它在性能、可配置性和可扩展性上有了显著提升,同时也修复了Log4...

    SpringBoot框架配置log4j和log4j2的配置代码

    Log4j是Apache的一个开源项目,用于生成日志。它的核心功能包括定义日志级别(如DEBUG、INFO、WARN、ERROR),配置日志输出目的地(控制台、文件、数据库等),以及自定义日志格式。SpringBoot默认使用的是Logback,...

    log4j-API-最新稳定版本log4j-1.2.17

    标题提及的是"log4j-API-最新稳定版本log4j-1.2.17",这表明我们关注的是日志框架Log4j的一个特定版本,即1.2.17。Log4j是Apache软件基金会开发的一个用于Java应用程序的日志记录工具,它提供了灵活的日志记录功能,...

    生成JSON格式数据和解析JSON格式数据

    生成JSON格式的数据通常涉及到以下几个步骤: 1. **创建数据结构**:首先,你需要定义一个数据结构,这可能是一个对象(JSONObject)或数组(JSONArray)。对象是由键值对组成的,用花括号{}包围,键和值之间用冒号...

    SQL自动生成JSON数据.docx

    SQL自动生成JSON数据 SQL语言是 stru ctured Query Language的缩写,用于管理关系数据库管理系统(RDBMS)。SQL语言可以对数据库进行创建、修改、删除、查询等操作。SQL语言是一种标准化的语言,广泛应用于各种...

    log4j2所需的jar

    4. **JSON和JSON Layout**:Log4j2支持JSON格式的日志输出,这对于现代日志收集和分析工具(如ELK Stack)非常有用。JSON Layout可以生成符合结构化的日志数据,方便机器解析。 5. **插件系统**:Log4j2拥有一个...

    log4j2所需jar包

    此库还负责解析Log4j2的配置文件,根据配置动态生成日志处理流程。 3. **版本号2.11.1**:这个版本号表示的是Log4j2的特定版本。每个版本都有可能引入新的特性、修复已知问题或优化性能。2.11.1版本意味着该版本...

    log4j2异步多线程打印

    在Log4j2中,配置文件通常使用XML、JSON或YAML格式,可以灵活定义日志级别、过滤器、Appenders和Layouts。例如,你可以设置一个异步Appender,使用`AsyncAppender`组件,并配置多个`Logger`来实现多线程下的不同日志...

    Log4j jar包.rar

    1. **配置文件**:Log4j的配置通常通过XML、JSON或.properties文件进行,定义了日志信息的格式、级别和输出目标。例如,`log4j.properties`或`log4j.xml`是常见的配置文件。 2. **Logger**:Logger是日志记录的基本...

    log4j 源码包 日志包 2.11.0

    Log4j 2.11.0作为一款优秀的日志框架,提供了一套完善的API,支持多级别的日志记录(如DEBUG、INFO、WARN、ERROR等)和多种输出格式。 2. **Log4j 2.11.0架构** Log4j 2.11.0采用模块化设计,主要包括配置器...

    log4j2用户指南

    - **配置文件格式**:Log4j2 支持 XML、JSON 和 YAML 格式的配置文件。 - **异步日志记录**:Log4j2 支持内置的异步日志记录功能,提高了应用程序的响应速度。 #### 4. API Log4j2 提供了一个丰富的 API,其中包括...

    springmvc+mybatis+jquery easyui+json+log4j

    Spring MVC、MyBatis、jQuery EasyUI、JSON 和 Log4j 是常见的 Java Web 开发技术栈,它们在构建高效、可维护的Web应用程序中扮演着重要角色。下面将详细介绍这些技术及其整合应用。 1. Spring MVC:Spring MVC 是 ...

    Log4j2异步写日志效率测试源码

    1. 配置文件(如log4j2.xml或log4j2.json):定义了Log4j2的日志配置,包括日志级别、输出目的地、是否启用异步模式等。 2. 测试类(如Log4j2AsyncTest.java):包含了测试用例,用于对比Log4j2异步和同步日志的性能...

    springboot+mybatis+log4j2

    在项目中,我们需要修改Spring Boot的默认配置,指定使用Log4j2,并在项目的配置文件中(如`log4j2.xml`或`log4j2.json`)定义日志级别、输出格式和目标位置。 在项目中,"springBootMybatis"这个压缩包文件可能...

    apache-log4j-2.3 jar包

    Log4j 2.3 支持PatternLayout、JSONLayout、HTMLLayout等多种布局,它们分别用于生成文本、JSON和HTML格式的日志输出。 5. **Filter**:过滤器允许开发者根据预定义的条件筛选日志事件,决定哪些事件应该被记录,...

    Java中Log4j 2日志框架的压缩包,版本是-2.23.0

    Java中的Log4j 2日志框架是一款广泛应用于企业级应用开发的日志处理工具,它在Log4j 1.x的基础上进行了大量的优化和改进,提供了更高效、更灵活的日志记录功能。Log4j 2.23.0是其最新的稳定版本,包含了对性能、安全...

    log4j2所需jar包和log4j2的详细配置

    **四、Log4j2的高级特性** 1. **异步日志记录**: Log4j2支持异步日志处理,通过使用LMAX Disruptor库,可以极大地提高日志性能。 2. **动态日志配置**: 可以在运行时通过JMX或API修改日志配置,无需重启应用程序。 ...

Global site tag (gtag.js) - Google Analytics