java.lang.Object
ch.qos.logback.core.spi.ContextAwareBase
ch.qos.logback.core.AppenderBase<ch.qos.logback.classic.spi.ILoggingEvent>
com.elitesland.ystdms.sys.log.provider.logback.appender.AbstractCustomAppender
com.elitesland.ystdms.sys.log.provider.logback.appender.LogstashAppender
All Implemented Interfaces:
ch.qos.logback.core.Appender<ch.qos.logback.classic.spi.ILoggingEvent>, ch.qos.logback.core.spi.ContextAware, ch.qos.logback.core.spi.FilterAttachable<ch.qos.logback.classic.spi.ILoggingEvent>, ch.qos.logback.core.spi.LifeCycle

public class LogstashAppender extends AbstractCustomAppender
ELK Appender.

将过滤后的日志序列化为 JSON 并推送至 Logstash。

官方GitHub:源码

LogStash配置(简化部分)
     
 input {
     tcp {
         port => 4560
         codec => json_lines
     }
 }

 filter {
     # 可选:如果你还接收其他来源的日志,可以用条件区分
     # 这里假设只有 JSON 日志,无需额外 filter
 }

 output {
     elasticsearch {
         hosts => ["elasticsearch:9200"]
         user => "elastic"
         password => "your_password"
         # 直接从日志字段中取索引名,不加日期后缀(完全固定)
         index => "%{[index_name]}"
         # 或者如果你希望保留日期后缀,可以拼接:
         # index => "%{[index_name]}-%{+YYYY.MM.dd}"
     }
     stdout { codec => rubydebug }  # 调试用
 }
     
 

注意:确保logstash的端口打开且可访问
  • Nested Class Summary

    Nested classes/interfaces inherited from class com.elitesland.ystdms.sys.log.provider.logback.appender.AbstractCustomAppender

    AbstractCustomAppender.DefaultLayout
  • Field Summary

    Fields inherited from class com.elitesland.ystdms.sys.log.provider.logback.appender.AbstractCustomAppender

    layout

    Fields inherited from class ch.qos.logback.core.AppenderBase

    name, started

    Fields inherited from class ch.qos.logback.core.spi.ContextAwareBase

    context
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    当前appender的名称
    void
    executeAppend(ch.qos.logback.classic.spi.ILoggingEvent event)
    将日志事件追加到Logstash
    void
    设置logstash服务器地址
    void
    setIndexName(String indexName)
    Elasticsearch上的索引名称
    void
    setPort(int port)
    设置TCP端口
    void
    启动Appender,初始化编码器和连接
    void
    停止Appender,清理资源

    Methods inherited from class com.elitesland.ystdms.sys.log.provider.logback.appender.AbstractCustomAppender

    append, getAppName, getTenantId, getUserId, getUsername, isActive, setActiveAppender, setLayout

    Methods inherited from class ch.qos.logback.core.AppenderBase

    addFilter, clearAllFilters, doAppend, getCopyOfAttachedFiltersList, getFilterChainDecision, getName, isStarted, setName, toString

    Methods inherited from class ch.qos.logback.core.spi.ContextAwareBase

    addError, addError, addInfo, addInfo, addStatus, addWarn, addWarn, getContext, getDeclaredOrigin, getStatusManager, setContext

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface ch.qos.logback.core.spi.ContextAware

    addError, addError, addInfo, addInfo, addStatus, addWarn, addWarn, getContext, setContext
  • Constructor Details

    • LogstashAppender

      public LogstashAppender()
  • Method Details

    • appenderName

      public String appenderName()
      Description copied from class: AbstractCustomAppender
      当前appender的名称

      可用于判断是否激活

      Specified by:
      appenderName in class AbstractCustomAppender
      Returns:
      appender名称
    • start

      public void start()
      启动Appender,初始化编码器和连接
      Specified by:
      start in interface ch.qos.logback.core.spi.LifeCycle
      Overrides:
      start in class ch.qos.logback.core.AppenderBase<ch.qos.logback.classic.spi.ILoggingEvent>
    • executeAppend

      public void executeAppend(ch.qos.logback.classic.spi.ILoggingEvent event)
      将日志事件追加到Logstash
      Specified by:
      executeAppend in class AbstractCustomAppender
      Parameters:
      event - 日志事件
    • stop

      public void stop()
      停止Appender,清理资源
      Specified by:
      stop in interface ch.qos.logback.core.spi.LifeCycle
      Overrides:
      stop in class ch.qos.logback.core.AppenderBase<ch.qos.logback.classic.spi.ILoggingEvent>
    • setHost

      public void setHost(String host)
      设置logstash服务器地址
      Parameters:
      host - 服务器地址
    • setPort

      public void setPort(int port)
      设置TCP端口
      Parameters:
      port - TCP端口
    • setIndexName

      public void setIndexName(String indexName)
      Elasticsearch上的索引名称
      Parameters:
      indexName - 索引名称