使用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来实现这样的功能,这个在后面的文章会分享出来。
分享到:
相关推荐
以json格式输出应用程序日志 作者:史蒂夫·里格比 ... log4j.appender.Json=org.apache.log4j.FileAppender log4j.appender.Json.File=${logfilename}.json log4j.appender.Json.layout=net.logstash.
捕获异常、存sd卡、自定义封装json(含网络工具类)、生成Json格式、传log日志到服务器、app崩溃友好重启 http://blog.csdn.net/u013210620/article/details/51917266
一个简单实用的WebService服务端开发样例,采用Spring MVC,利用 x-fire资源,加入 log4j日志记录,加入maven来获取对应依赖。 该服务提供一个针对 TRSServer 全文检索服务器数据库 的检索功能,通过 url来执行全文...
通过grunt任务从git log生成json 这个grunt插件将分析git log的输出,并生成一个JSON格式的数据结构,列出每个标签的所有提交。 为此,标签需要使用。 入门 该插件需要Grunt。 如果您以前从未使用过 ,请务必查看...
Tomcat8下使用Log4j接管生成日志文件,按天存放,日志转换成json格式 亲测可用
使用c++语言使用spdlog日志功能,创建新的message类进行包装,读取外部配置文件进行快速使用,好处可以不用每次都得make程序,只需要修改配置文件就可以直接运行程序
目的:Vue 中 把表单form数据 转化成json格式的数据 第一步:创建一个数据集(就是你表单需要的数据) 如果你表单都是一些正常的数据,比如 text 什么的。你定义好数据集,就去用 v-model 绑定数据。这样就可以实现...
使用项目中的LogEvents.json生成用于高性能日志记录的ILogger扩展 该解决方案被实现为dotnet工具,有关更多信息,访问 安装步骤(用于从源安装,供外部使用): 克隆存储库,打开命令提示符并导航到目标项目...
json-log-domain 支持JSON记录的库。 目前正在使用和和本机 。 用户将从中受益 使用特定于域的子树进行JSON日志记录 基于YAML的简单定义格式 通过或插件生成的用户友好型帮助程序类 Markdown文档生成器 Elastic...
用于从 git 标签和提交历史生成变更日志的命令行工具。 由 、 、 和。 安装 npm install -g auto-changelog 用法 只需在 git 存储库的根文件夹中运行auto-changelog 。 git log在幕后运行以解析提交历史。 Usage: ...
通过简单,可扩展和标准的博客索引格式生成rss / atom / json提要。 用法 $ tree log-folder/ log-folder/ ├── 2016.json ├── 2017.json ├── 2018.json └── config.json $ generate-feed log-folder --...
杰森发电机一个简单的库来生成json模拟。正在安装使用npm命令将此库安装到您的项目中: npm i json-generator --save 使用范例 const { generateJson } = require ( 'json-generator' ) ;console . log ( generate...
yog-log 是 Node Log 统计方案,是yog框架的log统计模块,支持中间件或者单独使用等方式,兼容ODP日志格式与配置。关于ODP的日志方案调研可查看此文档. 统计日志类型包括: server日志 access_log: web访问日志,...
composer.json: { " require " : { " zenozeng/gitlab-changelog " : " 0.1.1 " } } index.php: <?php require "vendor/autoload.php" ; use GitlabChangelog \ GitlabChangelog ; $ changelog = new ...
除此之外,如果用户提供配置(JSON文件),则Changelog CI会解析用户提供的配置文件,并根据用户config呈现更改日志。 然后,更改被提交和/或注释到发布请求请求中。 用法: 若要使用此操作,请求请求标题必须与...
Tomcat8下使用Log4j接管生成日志文件,按天存放,日志转换成json格式 亲测可用,日志格式如下: {"time":"2017-09-06 10:24:48,356","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deploying...
JSON模式生成器 规格: : 安装 npm install --save jsg07 用法 const jsg = require ( 'jsg07' ) ; let schema = jsg . infer ( { name : 'Mike' , male : true , tags : [ 'Gentle' , 'Nice' ] } ) ; console...
ModSecurity报告生成器 (有时称为Modsec)是针对Apache,Microsoft IIS和Nginx的开源Web应用程序防火墙(WAF)。 mod_sec_report将JSON格式的mod_security违规日志记录转换为HTML页面,以方便用户查看。 示例报告...
观察对象树的变化并生成 JSON 补丁 ()。 Uses ,在 NodeJS 6.4 及更高版本中可用。 用法 const { observe } = require ( "jsonpatch-observe" ) ; let observable = observe ( { } ) ; observable . $subscribe ( ...
无需安装模块即可生成变更日志,但必须在package.json中定义其repository url 。 $ changelog {npm module name} [release] [options] npm module :模块名称,例如express , npm , grunt等。 任何Github.com公共...