jurmous / logstash-log4j2 Goto Github PK
View Code? Open in Web Editor NEWLog4j2 plugin for logstash
Log4j2 plugin for logstash
Project is still in maintenance?Whether to support logstash 5.6?
From Logstash 2.1.1:
Bundler could not find compatible versions for gem "logstash":
In Gemfile:
logstash-input-log4j2 (>= 0) java depends on
logstash (< 2.0.0, >= 1.4.0) java
Could not find gem 'logstash (< 2.0.0, >= 1.4.0) java', which is required by gem 'logstash-input-log4j2 (>= 0) java', in any of the sources.
./plugin install logstash-input-log4j2
Validating logstash-input-log4j2
Installing logstash-input-log4j2
Plugin version conflict, aborting
ERROR: Installation Aborted, message: Bundler could not find compatible versions for gem "logstash-core":
In snapshot (Gemfile.lock):
logstash-core (= 2.0.0)
In Gemfile:
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-input-beats (>= 0) java depends on
logstash-core (< 3.0.0, >= 1.5.4) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-input-log4j2 (>= 0) java depends on
logstash-core (< 2.0.0, >= 1.4.0) java
logstash-core (= 2.0.0) java
Running bundle update
will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
Bundler could not find compatible versions for gem "logstash":
In Gemfile:
logstash-input-log4j2 (>= 0) java depends on
logstash (< 2.0.0, >= 1.4.0) java
Could not find gem 'logstash (< 2.0.0, >= 1.4.0) java', which is required by gem 'logstash-input-log4j2 (>= 0) java', in any of the sources.
When installing I get this error:
Plugin version conflict, aborting
ERROR: Installation Aborted, message: Bundler could not find compatible versions for gem "logstash-core":
In snapshot (Gemfile.lock):
logstash-core (= 5.0.0.alpha3)
In Gemfile:
logstash-core-plugin-api (= 2.1.6) java depends on
logstash-core (= 5.0.0.alpha3) java
logstash-input-log4j2 (>= 0) java depends on
logstash-core (< 2.0.0, >= 1.4.0) java
logstash-core-plugin-api (= 2.1.6) java depends on
logstash-core (= 5.0.0.alpha3) java
Is there an easy way to solve this?
I'm tring to install the plugin, but i got following error:
./logstash-plugin install logstash-input-log4j2
Validating logstash-input-log4j2
Installing logstash-input-log4j2
Plugin version conflict, aborting
ERROR: Installation Aborted, message: Bundler could not find compatible versions for gem "logstash-core":
In snapshot (Gemfile.lock):
logstash-core (= 2.4.0)
In Gemfile:
logstash-core-plugin-api (= 1.60.4) java depends on
logstash-core (<= 2.4.99, >= 2.4.0) java
logstash-output-zeromq (< 3.0.0) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-output-zeromq (< 3.0.0) java depends on
logstash-mixin-zeromq (>= 2.0.0) java depends on
logstash-core (< 3.0.0, >= 2.0.0) java
logstash-input-log4j2 (>= 0) java depends on
logstash-core (< 2.0.0, >= 1.4.0) java
logstash-core (= 2.4.0) java
Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
Bundler could not find compatible versions for gem "logstash":
In Gemfile:
logstash-input-log4j2 (>= 0) java depends on
logstash (< 2.0.0, >= 1.4.0) java
Could not find gem 'logstash (< 2.0.0, >= 1.4.0) java', which is required by gem 'logstash-input-log4j2 (>= 0) java', in any of the sources.
I can't execute bundle update
, there isn't bundle
script under $LOGSTASH/bin.
I've tried to fix the problem with ./logstash-plugin update
, the result is No plugin updated
. Now i have no idea, how to install the plugin...
Hi Jurmous,
First I'd like to say that the plugin is GREAT! and easy to use.
The issue occurs when I wrap log4j2-Socket appender with an Async appender.
For some reason the connection gets closed.
<Appenders>
<Socket name="socket_app" level="debug" host="localhost" port="8600">
<SerializedLayout />
</Socket>
<Async name="asyncSocket" bufferSize="2048">
<AppenderRef ref="socket_app"/>
</Async>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="asyncSocket"/>
</Root>
</Loggers>
input {
log4j2 {
host => localhost
port => 8600
mode => server
}
}
output {
elasticsearch {
host => localhost
cluster => "es_test"
index => "%{type}-%{+YYYY.MM.dd.HH}"
}
I'm getting a SocketExcetoion - Broket Pipe.
I also tried with re-connection config and it seems that the connection is getting closed by logstash side....
When I remove the Async appender it works OK(slower, but OK).
The Async+Socket appender works well against a stand-alone log4j-TCPSocketServer instance
Any Ideas??
Hello, question is in the title :)
More info: thttp://www.elastic.co/guide/en/logstash/current/_how_to_write_a_logstash_filter_plugin.html#_contributing_your_source_code_to_ulink_url_https_github_com_logstash_plugins_logstash_plugins_ulink_3
Because when i install , it throws error log just like :
logstash-output-http (>= 0) java depends on
logstash-mixin-http_client (< 3.0.0, >= 2.0.2) java depends on
logstash-core (< 3.0.0, >= 2.0.0.beta2) java
logstash-input-log4j2 (>= 0) java depends on
logstash-core (< 2.0.0, >= 1.4.0) java
Thanks,waiting for your answer.
Hi,
We are trying to get your plugin working with one of our setups but i am have varying results on the ease of install. We are behind a corporate firewall so trying to install from a local copy of 5.1 gem file.
I realize there is a current issue with LS plugin binary (elastic/logstash#3583) but this looks like it won't go into V1.5.x so is there any chance of getting this updated to LS 2.x?
Thanks,
Simon
Hi Jurriaan,
I am having an issue with log42 input, please see below
Accepted connection {:client=>"172.31.0.251:45698", :server=>"0.0.0.0:1530", :level=>:debug, :file=>"logstash/inputs/log4j2.rb", :line=>"151"}
Closing connection {:client=>"172.31.0.251:45698", :exception=>#<IOError: org.apache.logging.log4j.Level; local class incompatible: stream classdesc serialVersionUID = 3077535362528045615, local class serialVersionUID = 1581082>, :level=>:debug, :file=>"logstash/inputs/log4j2.rb", :line=>"116"}
Logstash version logstash-1.4.2-1_2c0f5a1.noarch, log4j2 release-5.0.0/logstash-input-log4j2-5.0.zip
I have tried it also with logstash-1.5.0.rc2-1.noarch but installation failed:
/opt/logstash/bin/plugin install logstash-input-log4j2
Validating logstash-input-log4j2
Installing logstash-input-log4j2
Plugin version conflict, aborting
Installation aborted
/opt/logstash/bin/plugin list |grep log4j
logstash-input-log4j
Can you please look ?
Thanks
UPD: It may be important, I have installed it copying jars from vendor/* to /opt/logstash/vendor and log4j2.rb into /opt/logstash/lib/logstash/inputs
@jurmous
Are there any plans to maintain this plugin? It's awesome but a bit outdated.
{:timestamp=>"2016-08-19T18:17:50.431000+0000", :message=>"Accepted connection", :client=>"172.172.50.4:58479", :server=>"0.0.0.0:7000", :level=>:debug, :file=>"logstash/inputs/log4j2.rb", :line=>"151", :method=>"run"} {:timestamp=>"2016-08-19T18:17:50.539000+0000", :level=>:debug, :message=>"org.apache.logging.log4j.core.impl.Log4jLogEvent$LogEventProxy; local class incompatible: stream classdesc serialVersionUID = -8634075037355293699, local class serialVersionUID = -7139032940312647146", :exception=>IOError, :backtrace=>["org/jruby/ext/jruby/JRubyObjectInputStream.java:58:in
read_object'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-log4j2-logstash2-5.2.1-java/lib/logstash/inputs/log4j2.rb:85:in handle_socket'", "org/jruby/RubyKernel.java:1479:in
loop'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-log4j2-logstash2-5.2.1-java/lib/logstash/inputs/log4j2.rb:83:in handle_socket'", "/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-log4j2-logstash2-5.2.1-java/lib/logstash/inputs/log4j2.rb:152:in
run'"], :file=>"logstash/inputs/log4j2.rb", :line=>"115", :method=>"handle_socket"}
`
I get the following error when running on Logstash 5.0.1 via Docker Logstash 5.0.1-1 (see below for howto).
`Plugin version conflict, aborting
ERROR: Installation Aborted, message: Bundler could not find compatible versions for gem "logstash-core":
In snapshot (Gemfile.lock):
logstash-core (= 5.0.1)
In Gemfile:
logstash-core-plugin-api (>= 0) java depends on
logstash-core (= 5.0.1) java
logstash-input-log4j2 (>= 0) java depends on
logstash-core (< 2.0.0, >= 1.4.0) java
logstash-core (>= 0) java
Running bundle update
will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
Bundler could not find compatible versions for gem "logstash":
In Gemfile:
logstash-input-log4j2 (>= 0) java depends on
logstash (< 2.0.0, >= 1.4.0) java
Could not find gem 'logstash (< 2.0.0, >= 1.4.0) java', which is required by gem 'logstash-input-log4j2 (>= 0) java', in any of the sources.`
Howto Reproduce with docker:
Fetch dockerElk stack composed docker build: https://github.com/deviantony/docker-elk
Edit: logstash\Dockerfile: Add line: RUN logstash-plugin install logstash-input-log4j2
Run: docker-compose build
Using release 4.0 of this excellent plugin, it appears that the disruptor jar used by log4j when using globally-asyn loggers as documented here: http://logging.apache.org/log4j/2.x/manual/async.html#AllAsync
the plugin complains that it can't find a class when I attempt to ship it a log using an asynchronous socket appender:
Pipeline started {:level=>:info, :file=>"logstash/pipeline.rb", :line=>"78"}
Accepted connection {:client=>"127.0.0.1:54923", :server=>"0.0.0.0:4560", :level=>:debug, :file=>"./logstash-1.4.2/third_party_plugins/log4j2/lib/logstash/inputs/log4j2.rb", :line=>"150"}
com/lmax/disruptor/EventFactory {:level=>:debug, :exception=>Java::JavaLang::NoClassDefFoundError, :backtrace=>["java.lang.ClassLoader.defineClass1(Native Method)", "java.lang.ClassLoader.defineClass(ClassLoader.java:800)", "java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)", "java.net.URLClassLoader.defineClass(URLClassLoader.java:449)", "java.net.URLClassLoader.access$100(URLClassLoader.java:71)", "java.net.URLClassLoader$1.run(URLClassLoader.java:361)", "java.net.URLClassLoader$1.run(URLClassLoader.java:355)", "java.security.AccessController.doPrivileged(Native Method)", "java.net.URLClassLoader.findClass(URLClassLoader.java:354)", "org.jruby.util.JRubyClassLoader.findClass(JRubyClassLoader.java:128)", "java.lang.ClassLoader.loadClass(ClassLoader.java:425)", "java.lang.ClassLoader.loadClass(ClassLoader.java:358)", "org.apache.logging.log4j.core.async.RingBufferLogEvent.<clinit>(RingBufferLogEvent.java:56)", "java.lang.Class.forName0(Native Method)", "java.lang.Class.forName(Class.java:274)", "org.jruby.ext.jruby.JRubyObjectInputStream$JRubyObjectInputStreamImpl.resolveClass(JRubyObjectInputStream.java:84)", "java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1612)", "java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)", "java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)", "java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)", "java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)", "org.jruby.ext.jruby.JRubyObjectInputStream.readObject(JRubyObjectInputStream.java:56)", "org.jruby.ext.jruby.JRubyObjectInputStream$INVOKER$i$0$0$readObject.call(JRubyObjectInputStream$INVOKER$i$0$0$readObject.gen)", "org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:56)", "org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:306)", "org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:136)", "org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:60)", "org.jruby.ast.DAsgnNode.interpret(DAsgnNode.java:110)", "org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)", "org.jruby.ast.BlockNode.interpret(BlockNode.java:71)", "org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:112)", "org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:206)", "org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:157)", "org.jruby.runtime.Interpreted19Block.yieldSpecific(Interpreted19Block.java:130)", "org.jruby.runtime.Block.yieldSpecific(Block.java:111)", "org.jruby.RubyKernel.loop(RubyKernel.java:1521)", "org.jruby.RubyKernel$INVOKER$s$0$0$loop.call(RubyKernel$INVOKER$s$0$0$loop.gen)", "org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:316)", "org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:145)", "org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:154)", "org.jruby.ast.FCallNoArgBlockNode.interpret(FCallNoArgBlockNode.java:32)", "org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)", "org.jruby.ast.BlockNode.interpret(BlockNode.java:71)", "org.jruby.ast.RescueNode.executeBody(RescueNode.java:221)", "org.jruby.ast.RescueNode.interpret(RescueNode.java:116)", "org.jruby.ast.BeginNode.interpret(BeginNode.java:83)", "org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)", "org.jruby.ast.EnsureNode.interpret(EnsureNode.java:96)", "org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)", "org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:225)", "org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:214)", "org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:346)", "org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:204)", "org.jruby.ast.FCallTwoArgNode.interpret(FCallTwoArgNode.java:38)", "org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)", "org.jruby.ast.BlockNode.interpret(BlockNode.java:71)", "org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:112)", "org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:206)", "org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:194)", "org.jruby.runtime.Interpreted19Block.call(Interpreted19Block.java:125)", "org.jruby.runtime.Block.call(Block.java:101)", "org.jruby.RubyProc.call(RubyProc.java:290)", "org.jruby.RubyProc.call(RubyProc.java:228)", "org.jruby.internal.runtime.RubyRunnable.run(RubyRunnable.java:99)", "java.lang.Thread.run(Thread.java:745)"], :file=>"./logstash-1.4.2/third_party_plugins/log4j2/lib/logstash/inputs/log4j2.rb", :line=>"114"}
Closing connection {:client=>"127.0.0.1:54923", :exception=>java.lang.NoClassDefFoundError: com/lmax/disruptor/EventFactory, :level=>:debug, :file=>"./logstash-1.4.2/third_party_plugins/log4j2/lib/logstash/inputs/log4j2.rb", :line=>"115"}
The disruptor jar seems to be required when you work with the asynchronous loggers using the -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector.
The concept of asynchronous loggers is new in Log4j2 and is different from wrapping a socket appender with an asynchronous appender.
I tried manually placing the jar in the vendor subfolder of the plugin, but that did not do anything.
Is this method of shipping logs to your plugin supported?
Hi!
Thanks for the plugin!
I'm trying to get it work but no luck for the moment.
Logstash-1.4.2 with this is the configuration:
This is my config file:
input {
log4j2 {
mode => "server"
port => 7000
}
}
output {
stdout { codec => rubydebug
}
elasticsearch { host => localhost }
}
And this is what happens: Logstash doesn't complete the load and doesn't open the port:
Here is how I start it:
/usr/bin/java -Djava.io.tmpdir=/var/lib/logstash -Xmx500m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -jar /opt/logstash/vendor/jar/jruby-complete-1.7.11.jar -I/opt/logstash/lib /opt/logstash/lib/logstash/runner.rb agent -f /etc/logstash/conf.d -l /var/log/logstash/logstash.log --debug --pluginpath /etc/logstash/logstash-log4j2-release-4.0/lib/
The port is not opened:
lsof -nPi:7000
And these are the logstash debug logs:
{:timestamp=>"2015-01-14T10:24:26.386000+0000", :message=>"Adding plugin path", :path=>"/etc/logstash/logstash-log4j2-release-4.0/lib/", :level=>:debug, :file=>"logstash/agent.rb", :line=>"282"}
{:timestamp=>"2015-01-14T10:24:26.403000+0000", :message=>"Reading config file", :file=>"logstash/agent.rb", :level=>:debug, :line=>"301"}
{:timestamp=>"2015-01-14T10:24:26.732000+0000", :message=>"Compiled pipeline code:\n@inputs = []\n@filters = []\n@outputs = []\n@input_log4j2_1 = plugin("input", "log4j2", LogStash::Util.hash_merge_many({ "mode" => ("server".force_encoding("UTF-8")) }, { "port" => 7000 }))\n\n@inputs << @input_log4j2_1\n@output_stdout_2 = plugin("output", "stdout", LogStash::Util.hash_merge_many({ "codec" => ("rubydebug".force_encoding("UTF-8")) }))\n\n@outputs << @output_stdout_2\n@output_elasticsearch_3 = plugin("output", "elasticsearch", LogStash::Util.hash_merge_many({ "host" => ("localhost".force_encoding("UTF-8")) }))\n\n@outputs << @output_elasticsearch_3\n @filter_func = lambda do |event, &block|\n extra_events = []\n @logger.debug? && @logger.debug("filter received", :event => event.to_hash)\n extra_events.each(&block)\n end\n @output_func = lambda do |event, &block|\n @logger.debug? && @logger.debug("output received", :event => event.to_hash)\n @output_stdout_2.handle(event)\n @output_elasticsearch_3.handle(event)\n \n end", :level=>:debug, :file=>"logstash/pipeline.rb", :line=>"26"}
{:timestamp=>"2015-01-14T10:24:26.963000+0000", :message=>"Using milestone 1 input plugin 'log4j2'. This plugin should work, but would benefit from use by folks like you. Please let us know if you find bugs or have suggestions on how to improve this plugin. For more information on plugin milestones, see http://logstash.net/docs/1.4.2-modified/plugin-milestones", :level=>:warn, :file=>"logstash/config/mixin.rb", :line=>"209"}
{:timestamp=>"2015-01-14T10:24:26.991000+0000", :message=>"config LogStash::Codecs::Plain/@charset = "UTF-8"", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:26.997000+0000", :message=>"config LogStash::Inputs::Log4j2/@mode = "server"", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:26.998000+0000", :message=>"config LogStash::Inputs::Log4j2/@PORT = 7000", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.012000+0000", :message=>"config LogStash::Inputs::Log4j2/@debug = false", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.031000+0000", :message=>"config LogStash::Inputs::Log4j2/@codec = <LogStash::Codecs::Plain charset=>"UTF-8">", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.032000+0000", :message=>"config LogStash::Inputs::Log4j2/@add_field = {}", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.033000+0000", :message=>"config LogStash::Inputs::Log4j2/@host = "0.0.0.0"", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.037000+0000", :message=>"config LogStash::Inputs::Log4j2/@data_timeout = 5", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.132000+0000", :message=>"config LogStash::Outputs::Stdout/@codec = <LogStash::Codecs::RubyDebug >", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.134000+0000", :message=>"config LogStash::Outputs::Stdout/@type = """, :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.136000+0000", :message=>"config LogStash::Outputs::Stdout/@tags = []", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.138000+0000", :message=>"config LogStash::Outputs::Stdout/@exclude_tags = []", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.151000+0000", :message=>"config LogStash::Outputs::Stdout/@Workers = 1", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.223000+0000", :message=>"config LogStash::Codecs::Plain/@charset = "UTF-8"", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.231000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@host = "localhost"", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.233000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@type = """, :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.247000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@tags = []", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.249000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@exclude_tags = []", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.250000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@codec = <LogStash::Codecs::Plain charset=>"UTF-8">", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.256000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@Workers = 1", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.257000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@Index = "logstash-%{+YYYY.MM.dd}"", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.259000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@manage_template = true", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.260000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@template_name = "logstash"", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.262000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@template_overwrite = false", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.264000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@document_id = nil", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.265000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@Embedded = false", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.267000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@embedded_http_port = "9200-9300"", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.272000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@max_inflight_requests = 50", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.274000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@flush_size = 5000", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.283000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@idle_flush_time = 1", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
{:timestamp=>"2015-01-14T10:24:27.285000+0000", :message=>"config LogStash::Outputs::ElasticSearch/@action = "index"", :level=>:debug, :file=>"logstash/config/mixin.rb", :line=>"105"}
Thanks a lot for your help!
Rafa
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.