项目作者: ivandzf

项目描述 :
Custom layout for appender log4j2
高级语言: Java
项目地址: git://github.com/ivandzf/log4j2-custom-layout.git
创建时间: 2018-10-08T16:54:41Z
项目社区:https://github.com/ivandzf/log4j2-custom-layout

开源协议:Apache License 2.0

下载


log4j2-custom-layout v1.1.0

Codacy Badge
CircleCI


Custom Layout for logging

Features

  • Custom Console Layout
  • Custom Json Layout (Support Kafka Logging)

How to use

  1. <dependency>
  2. <groupId>com.github.ivandzf</groupId>
  3. <artifactId>log4j2-custom-layout</artifactId>
  4. <version>1.1.0</version>
  5. </dependency>

Configuration

Environment

set environment for kafka json logging

  1. LogEnvironment.Builder.build("127.0.0.1","9099","yourApplicationName");

Custom Console Layout

add layout to your appender

  1. <Console name="customConsole">
  2. <CustomConsoleLayout></CustomConsoleLayout>
  3. </Console>

example logging

  1. 09-10-2018 01:32:55:746 INFO [main] org.ivandzf.logging.Application - Started Application in 2.483 seconds (JVM running for 3.981)

Custom Json Layout

console json

  1. <Console name="customJsonLayout">
  2. <CustomJsonLayout></CustomJsonLayout>
  3. </Console>

or kafka logging json

  1. <Kafka name="kafkaAppender" topic="your_topic">
  2. <CustomJsonLayout></CustomJsonLayout>
  3. <Property name="bootstrap.servers">http://your_kafka_server</Property>
  4. </Kafka>

example logging output json

  1. {"applicationName":"logging-test","ipAddress":"127.0.0.1","port":"9099","level":"INFO","thread":"main","threadId":1,"loggerName":"org.ivandzf.logging.Application","message":"Started Application in 1.81 seconds (JVM running for 3.096)"}

add hideEnvironmentWhenNull=”false” for show all message when ipAddress/port/applicationName is not set

  1. <Console name="customJsonLayout">
  2. <CustomJsonLayout hideEnvironmentWhenNull="false"></CustomJsonLayout>
  3. </Console>

Custom Message Json

just inject object CustomMessage in your message log

  1. List<String> strings = new ArrayList<>();
  2. strings.add("1");
  3. strings.add("2");
  4. List<Integer> integers = new ArrayList<>();
  5. integers.add(1);
  6. integers.add(2);
  7. Map<String, String> stringMap = new HashMap<>();
  8. stringMap.put("string key", "string value");
  9. Map<String, Object> map = new HashMap<>();
  10. map.put("test key", "test value");
  11. map.put("test key list strings", strings);
  12. map.put("test key list integers", integers);
  13. map.put("test key map", stringMap);
  14. map.put("test key boolean", true);
  15. log.debug(CustomMessage.builder().message("test custom debug log").newField(map).build().toJson());

then the result is

  1. {"applicationName":"logging-test","ipAddress":"127.0.0.1","port":"9099","level":"DEBUG","thread":"qtp1688150025-32","threadId":32,"loggerName":"org.ivandzf.logging.Application","message":"test custom debug log","test key map":"{\"string key\":\"string value\"}","test key boolean":true,"test key list integers":"[1.0,2.0]","test key":"test value","test key list strings":"[\"1\",\"2\"]"}

Kafka Logging on Kibana

Kibana

logstash config

  1. input {
  2. kafka {
  3. topics => ["your_topic"]
  4. bootstrap_servers => "your_kafka_server"
  5. codec => "json"
  6. }
  7. }