/src/main/java/com/dmtools/webapp/config/LoggingConfiguration.java

https://gitlab.com/cubetek/dmtools · Java · 70 lines · 50 code · 17 blank · 3 comment · 1 complexity · f776901d9686a768f0d6c6fcd91db8b0 MD5 · raw file

  1. package com.dmtools.webapp.config;
  2. import ch.qos.logback.classic.AsyncAppender;
  3. import ch.qos.logback.classic.LoggerContext;
  4. import net.logstash.logback.appender.LogstashSocketAppender;
  5. import net.logstash.logback.stacktrace.ShortenedThrowableConverter;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.beans.factory.annotation.Value;
  9. import org.springframework.context.annotation.Configuration;
  10. import javax.annotation.PostConstruct;
  11. import javax.inject.Inject;
  12. @Configuration
  13. public class LoggingConfiguration {
  14. private final Logger log = LoggerFactory.getLogger(LoggingConfiguration.class);
  15. private LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
  16. @Value("${spring.application.name}")
  17. private String appName;
  18. @Value("${server.port}")
  19. private String serverPort;
  20. @Inject
  21. private DMToolsProperties DMToolsProperties;
  22. @PostConstruct
  23. private void init() {
  24. if (DMToolsProperties.getLogging().getLogstash().isEnabled()) {
  25. addLogstashAppender();
  26. }
  27. }
  28. public void addLogstashAppender() {
  29. log.info("Initializing Logstash logging");
  30. LogstashSocketAppender logstashAppender = new LogstashSocketAppender();
  31. logstashAppender.setName("LOGSTASH");
  32. logstashAppender.setContext(context);
  33. String customFields = "{\"app_name\":\"" + appName + "\",\"app_port\":\"" + serverPort + "\"}";
  34. // Set the Logstash appender config from JHipster properties
  35. logstashAppender.setSyslogHost(DMToolsProperties.getLogging().getLogstash().getHost());
  36. logstashAppender.setPort(DMToolsProperties.getLogging().getLogstash().getPort());
  37. logstashAppender.setCustomFields(customFields);
  38. // Limit the maximum length of the forwarded stacktrace so that it won't exceed the 8KB UDP limit of logstash
  39. ShortenedThrowableConverter throwableConverter = new ShortenedThrowableConverter();
  40. throwableConverter.setMaxLength(7500);
  41. throwableConverter.setRootCauseFirst(true);
  42. logstashAppender.setThrowableConverter(throwableConverter);
  43. logstashAppender.start();
  44. // Wrap the appender in an Async appender for performance
  45. AsyncAppender asyncLogstashAppender = new AsyncAppender();
  46. asyncLogstashAppender.setContext(context);
  47. asyncLogstashAppender.setName("ASYNC_LOGSTASH");
  48. asyncLogstashAppender.setQueueSize(DMToolsProperties.getLogging().getLogstash().getQueueSize());
  49. asyncLogstashAppender.addAppender(logstashAppender);
  50. asyncLogstashAppender.start();
  51. context.getLogger("ROOT").addAppender(asyncLogstashAppender);
  52. }
  53. }