同步操作将从 Allen/JsonLayout 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#JsonLayout
##1、项目说明
本项目通过自定义Layout实现log4j的JSON输出格式。
###1.1、运行环境
###1.2、配置示例
log4j.appender.jsonLog.layout = com.zhph.log4j.layout.JsonLayout
log4j.appender.jsonLog.layout.customFields = class,method,line,message
其中:
com.zhph.log4j.layout.JsonLayout 是 JsonLayout 的类全名;
customFields 可配可不配,不配时输出全部字段,如果配置则只输出配置的字段,字段间以英文逗号分割。
###1.3、customFields的所有可配字段
##2、更新说明
###v1.1 2017/06/23
添加了属性 prefix 以便配置消息前缀,缺省时为空
添加了属性 suffix 以便配置消息后缀,缺省时为空
示例:
log4j.appender.jsonLog.layout.prefix =
log4j.appender.jsonLog.layout.suffix = ,
##3、应用示例
###3.1、缺省配置
缺省配置指的是不配置指定的字段以及前后缀,如:
对应的日志输入内容:
{"class":"com.zhph.log4j.layout.TestClass","file":"TestClass.java","level":"ERROR","line":"11","logger":"testJsonLog","message":"这是日志消息内容","method":"test01","thread":"main","throwable":{"cause":null,"class":"java.lang.Exception","localizedMessage":"这里是异常信息内容","message":"这里是异常信息内容","suppressed":[],"throwableStrRep":["java.lang.Exception: 这里是异常信息内容","\tat com.zhph.log4j.layout.TestClass.test01(TestClass.java:11)","\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)","\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)","\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)","\tat java.lang.reflect.Method.invoke(Method.java:606)","\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)","\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)","\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)","\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)","\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)","\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69)","\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48)","\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)","\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)","\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)","\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)","\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)","\tat org.junit.runners.ParentRunner.run(ParentRunner.java:292)","\tat org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)","\tat org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)","\tat org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)","\tat org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)","\tat org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)","\tat org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)"]},"time":"2017-06-26 14:40:33","timeMillis":1498459233725}
格式化处理后:
{
"class":"com.zhph.log4j.layout.TestClass",
"file":"TestClass.java",
"level":"ERROR",
"line":"11",
"logger":"testJsonLog",
"message":"这是日志消息内容",
"method":"test01",
"thread":"main",
"throwable":{
"cause":null,
"class":"java.lang.Exception",
"localizedMessage":"这里是异常信息内容",
"message":"这里是异常信息内容",
"suppressed":[
],
"throwableStrRep":[
"java.lang.Exception: 这里是异常信息内容",
" at com.zhph.log4j.layout.TestClass.test01(TestClass.java:11)",
" at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
" at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)",
" at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
" at java.lang.reflect.Method.invoke(Method.java:606)",
" at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)",
" at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)",
" at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)",
" at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)",
" at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)",
" at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69)",
" at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48)",
" at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)",
" at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)",
" at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)",
" at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)",
" at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)",
" at org.junit.runners.ParentRunner.run(ParentRunner.java:292)",
" at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)",
" at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)",
" at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)",
" at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)",
" at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)",
" at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)"
]
},
"time":"2017-06-26 14:40:33",
"timeMillis":1498459233725
}
###3.2、自定义配置 自定义配置是指自定义要显示的日志信息字段,如:
对应的日志输入内容:
{"class":"com.zhph.log4j.layout.TestClass","line":"11","message":"这是日志消息内容","method":"test01"}
格式化处理后:
{
"class":"com.zhph.log4j.layout.TestClass",
"line":"11",
"message":"这是日志消息内容",
"method":"test01"
}
###3.3、配置前后缀 可以给日志消息配置前后缀,如:
对应的日志输入内容:
<prefix>{"class":"com.zhph.log4j.layout.TestClass","line":"11","message":"这是日志消息内容","method":"test01"},
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。