فهرست منبع

logback扩展

chenweida 7 سال پیش
والد
کامیت
46c1f58aa3
22فایلهای تغییر یافته به همراه638 افزوده شده و 163 حذف شده
  1. 2 2
      common-cache-starter/pom.xml
  2. 6 6
      common-logback-starter/pom.xml
  3. 0 38
      common-logback-starter/src/main/java/com.yihu.base/Log2ESMessageListener.java
  4. 0 37
      common-logback-starter/src/main/java/com.yihu.base/Log2ElasticsearchAppender.java
  5. 0 42
      common-logback-starter/src/main/java/com.yihu.base/Log2ElasticsearchUtils.java
  6. 109 0
      common-logback-starter/src/main/java/com.yihu.base/es/ElasticsearchAppender.java
  7. 72 0
      common-logback-starter/src/main/java/com.yihu.base/es/buffer/BufferConsumer.java
  8. 31 0
      common-logback-starter/src/main/java/com.yihu.base/es/buffer/EventBuffer.java
  9. 52 0
      common-logback-starter/src/main/java/com.yihu.base/es/config/ElasticSearchConnectionFactiory.java
  10. 27 0
      common-logback-starter/src/main/java/com.yihu.base/es/properties/BufferProperties.java
  11. 38 0
      common-logback-starter/src/main/java/com.yihu.base/es/properties/ElasticsearchAppenderProperties.java
  12. 131 0
      common-logback-starter/src/main/java/com.yihu.base/es/properties/ElasticsearchProperties.java
  13. 16 0
      common-logback-starter/src/main/java/com.yihu.base/es/properties/MessageProperties.java
  14. 40 0
      common-logback-starter/src/main/resources/elasticsearchAppender_logback_demo.xml
  15. 0 33
      common-logback-starter/src/main/resources/logback.xml
  16. 0 5
      common-logback-starter/src/main/resources/template.yml
  17. 30 0
      demo/pom.xml
  18. 20 0
      demo/src/main/java/com/demo/DemoApplication.java
  19. 26 0
      demo/src/main/java/com/demo/controller/DemoController.java
  20. 2 0
      demo/src/main/resources/application.yml
  21. 35 0
      demo/src/main/resources/logback.xml
  22. 1 0
      pom.xml

+ 2 - 2
common-cache-starter/pom.xml

@ -24,8 +24,8 @@
            <version>1.8.10</version>
        </dependency>
        <dependency>
            <groupId>com.yihu.base</groupId>
            <artifactId>common-async</artifactId>
            <groupId>com.yihu</groupId>
            <artifactId>common-async-starter</artifactId>
        </dependency>
    </dependencies>
    

+ 6 - 6
common-logback-starter/pom.xml

@ -14,6 +14,10 @@
    <version>1.0.1</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
@ -27,12 +31,8 @@
            <artifactId>logback-access</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu</groupId>
            <artifactId>common-data-es-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu</groupId>
            <artifactId>common-activemq-starter</artifactId>
            <groupId>io.searchbox</groupId>
            <artifactId>jest</artifactId>
        </dependency>
    </dependencies>
</project>

+ 0 - 38
common-logback-starter/src/main/java/com.yihu.base/Log2ESMessageListener.java

@ -1,38 +0,0 @@
package com.yihu.base;
import com.yihu.base.activemq.ActiveMQHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import javax.annotation.PostConstruct;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class Log2ESMessageListener implements MessageListener{
    @Autowired
    private ActiveMQHelper activeMQHelper;
    @Autowired
    private Log2ElasticsearchUtils log2ElasticsearchUtils;
    @Value("${log2es.activemq.queueName}")
    private String queueName;
    @PostConstruct
    public void init(){
        activeMQHelper.addListener(queueName, new Log2ESMessageListener());
    }
    @Override
    public void onMessage(Message message) {
        TextMessage textMessage = (TextMessage) message;
        try {
            log2ElasticsearchUtils.toElastisearch(textMessage.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

+ 0 - 37
common-logback-starter/src/main/java/com.yihu.base/Log2ElasticsearchAppender.java

@ -1,37 +0,0 @@
package com.yihu.base;
import ch.qos.logback.core.rolling.RollingFileAppender;
import ch.qos.logback.core.rolling.TriggeringPolicy;
import com.yihu.base.activemq.ActiveMQHelper;
import com.yihu.base.es.config.ElasticFactory;
import com.yihu.base.es.config.ElastricSearchHelper;
import org.apache.commons.lang.StringUtils;
import org.slf4j.event.LoggingEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
public class Log2ElasticsearchAppender<E> extends RollingFileAppender{
    @Autowired
    private Log2ElasticsearchUtils log2ElasticsearchUtils;
    @Autowired
    private ActiveMQHelper activeMQHelper;
    @Value("${log2es.activemq.queueName}")
    private String queueName;
    public Log2ElasticsearchAppender() {
    }
    @Override
    protected void append(Object event) {
        if(log2ElasticsearchUtils.checkEsConnection()){
            LoggingEvent loggingEvent = (LoggingEvent)event;
            activeMQHelper.send(queueName,loggingEvent.getMessage());
            return;
        }
        super.subAppend(event);
    }
}

+ 0 - 42
common-logback-starter/src/main/java/com.yihu.base/Log2ElasticsearchUtils.java

@ -1,42 +0,0 @@
package com.yihu.base;
import com.yihu.base.es.config.ElasticFactory;
import com.yihu.base.es.config.ElastricSearchHelper;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Log2ElasticsearchUtils {
    @Autowired
    private ElasticFactory elasticFactory;
    @Autowired
    private ElastricSearchHelper elastricSearchHelper;
    @Value("${log2es.index}")
    private String esIndex;
    @Value("${log2es.type}")
    private String estype;
    public boolean checkEsConnection(){
        try {
            if(null != elasticFactory.getJestClient()){
                return true;
            }
        }catch (Exception e){
            return false;
        }
        return false;
    }
    public void toElastisearch(String data){
        if(StringUtils.isNotEmpty(esIndex) && StringUtils.isNotEmpty(estype)){
            elastricSearchHelper.save(esIndex,estype,data);
        }
    }
}

+ 109 - 0
common-logback-starter/src/main/java/com.yihu.base/es/ElasticsearchAppender.java

@ -0,0 +1,109 @@
package com.yihu.base.es;
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.core.AppenderBase;
import com.yihu.base.es.buffer.BufferConsumer;
import com.yihu.base.es.buffer.EventBuffer;
import com.yihu.base.es.config.ElasticSearchConnectionFactiory;
import com.yihu.base.es.properties.ElasticsearchAppenderProperties;
public class ElasticsearchAppender extends AppenderBase<LoggingEvent> {
    //相关的全部属性
    private ElasticsearchAppenderProperties elasticsearchAppenderProperties = new ElasticsearchAppenderProperties();
    //消费者
    private Thread bufferConsumerThread = null;
    //缓冲队列
    private EventBuffer eventBuffer = null;
    public ElasticsearchAppender() {
    }
    @Override
    public void start() {
        super.start();
        //初始化内存缓冲队列
        eventBuffer = new EventBuffer(elasticsearchAppenderProperties.getBufferProperties());
        //初始化ES连接池
        ElasticSearchConnectionFactiory.init(elasticsearchAppenderProperties.getElasticsearchProperties());
        //启动消费者
        BufferConsumer bufferConsumer = new BufferConsumer(eventBuffer, elasticsearchAppenderProperties);
        bufferConsumerThread = new Thread(bufferConsumer);
        bufferConsumerThread.start();
    }
    @Override
    protected void append(LoggingEvent eventObject) {
        //添加日志到缓冲区
        eventBuffer.addLogEvent(eventObject);
    }
    //========================================properties========================================
    //==============elasticsearch start==============
    public void setHosts(String hosts) {
        elasticsearchAppenderProperties.getElasticsearchProperties().setHosts(hosts);
    }
    public void setIndex(String index) {
        elasticsearchAppenderProperties.getElasticsearchProperties().setIndex(index);
    }
    public void setType(String type) {
        elasticsearchAppenderProperties.getElasticsearchProperties().setType(type);
    }
    public void setClusterName(String clusterName) {
        elasticsearchAppenderProperties.getElasticsearchProperties().setClusterName(clusterName);
    }
    public void setMaxTotalConnection(Integer maxTotalConnection) {
        elasticsearchAppenderProperties.getElasticsearchProperties().setMaxTotalConnection(maxTotalConnection);
    }
    public void setMaxConnectionIdleTime(Integer maxConnectionIdleTime) {
        elasticsearchAppenderProperties.getElasticsearchProperties().setMaxConnectionIdleTime(maxConnectionIdleTime);
    }
    public void setRolling(String rolling) {
        elasticsearchAppenderProperties.getElasticsearchProperties().setRolling(rolling);
    }
    public void setConnTimeout(Integer connTimeout) {
        elasticsearchAppenderProperties.getElasticsearchProperties().setConnTimeout(connTimeout);
    }
    public void setReadTimeout(Integer readTimeout) {
        elasticsearchAppenderProperties.getElasticsearchProperties().setReadTimeout(readTimeout);
    }
    public void setMultiThreaded(Boolean multiThreaded) {
        elasticsearchAppenderProperties.getElasticsearchProperties().setMultiThreaded(multiThreaded);
    }
    public void setDiscoveryEnabled(Boolean discoveryEnabled) {
        elasticsearchAppenderProperties.getElasticsearchProperties().setDiscoveryEnabled(discoveryEnabled);
    }
    //==============elasticsearch end==============
    //==============buffer start==============
    public void setSleepTime(Long sleepTime) {
        elasticsearchAppenderProperties.getBufferProperties().setSleepTime(sleepTime);
    }
    public void setBufferSize(Integer bufferSize) {
        elasticsearchAppenderProperties.getBufferProperties().setBufferSize(bufferSize);
    }
    //==============buffer end==============
    //==============message start==============
    public void setPattern(String pattern) {
        elasticsearchAppenderProperties.getMessageProperties().setPattern(pattern);
    }
    //==============message end==============
}

+ 72 - 0
common-logback-starter/src/main/java/com.yihu.base/es/buffer/BufferConsumer.java

@ -0,0 +1,72 @@
package com.yihu.base.es.buffer;
import ch.qos.logback.classic.PatternLayout;
import ch.qos.logback.classic.spi.ILoggingEvent;
import com.yihu.base.es.config.ElasticSearchConnectionFactiory;
import com.yihu.base.es.properties.ElasticsearchAppenderProperties;
import io.searchbox.client.JestClient;
import io.searchbox.core.Bulk;
import io.searchbox.core.BulkResult;
import io.searchbox.core.Index;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by chenweida on 2018/2/24.
 */
public class BufferConsumer implements Runnable {
    //缓冲区
    private EventBuffer eventBuffer;
    //消费者相关配政治
    private ElasticsearchAppenderProperties elasticsearchAppenderProperties;
    //格式化日志数据
    private PatternLayout patternLayout=new PatternLayout();
    public BufferConsumer(EventBuffer eventBuffer, ElasticsearchAppenderProperties elasticsearchAppenderProperties) {
        this.eventBuffer = eventBuffer;
        this.elasticsearchAppenderProperties = elasticsearchAppenderProperties;
    }
    @Override
    public void run() {
        while (true) {
            try {
                //格式格式化工具
                patternLayout.setPattern(elasticsearchAppenderProperties.getMessageProperties().getPattern());
                //如果队列没数据休眠
                if (eventBuffer.getBuffer().size() == 0) {
                    sleep();
                    continue;
                }
                List<ILoggingEvent> eventObjectList = new ArrayList<>();
                //获取队列中的全部数据
                eventBuffer.getBuffer().drainTo(eventObjectList);
                //把数据存到ES中
                JestClient jestClient = ElasticSearchConnectionFactiory.getConnection();
                Bulk.Builder bulk = new Bulk.Builder()
                        .defaultIndex(elasticsearchAppenderProperties.getElasticsearchProperties().getIndex())
                        .defaultType(elasticsearchAppenderProperties.getElasticsearchProperties().getType());
                for (ILoggingEvent obj : eventObjectList) {
                    String message=patternLayout.doLayout(obj);
                    Index index = new Index.Builder(obj.getFormattedMessage()).build();
                    bulk.addAction(index);
                }
                BulkResult br = jestClient.execute(bulk.build());
                //线程休眠
                sleep();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public void sleep() throws Exception {
        //线程休眠
        Thread.sleep(elasticsearchAppenderProperties.getBufferProperties().getSleepTime());
    }
}

+ 31 - 0
common-logback-starter/src/main/java/com.yihu.base/es/buffer/EventBuffer.java

@ -0,0 +1,31 @@
package com.yihu.base.es.buffer;
import ch.qos.logback.classic.spi.LoggingEvent;
import com.yihu.base.es.properties.BufferProperties;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
 * Created by chenweida on 2018/2/24.
 */
public class EventBuffer {
    //缓冲队列
    BlockingQueue queue = null;
    public EventBuffer(BufferProperties bufferProperties) {
        queue = new ArrayBlockingQueue(bufferProperties.getBufferSize());
    }
    public BlockingQueue getBuffer() {
        return queue;
    }
    public void setQueue(BlockingQueue queue) {
        this.queue = queue;
    }
    public void addLogEvent(LoggingEvent eventObject) {
        queue.add(eventObject);
    }
}

+ 52 - 0
common-logback-starter/src/main/java/com.yihu.base/es/config/ElasticSearchConnectionFactiory.java

@ -0,0 +1,52 @@
package com.yihu.base.es.config;
import com.yihu.base.es.properties.ElasticsearchProperties;
import io.searchbox.client.JestClient;
import io.searchbox.client.JestClientFactory;
import io.searchbox.client.config.HttpClientConfig;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
/**
 * Created by chenweida on 2018/2/24.
 * es链接工程
 */
public class ElasticSearchConnectionFactiory {
    private static JestClientFactory factory = null;
    private ElasticSearchConnectionFactiory() {
    }
    /**
     * 初始化链接
     *
     * @param elasticsearchProperties
     */
    synchronized static public void init(ElasticsearchProperties elasticsearchProperties) {
        if (factory == null) {
            String[] hostArray = elasticsearchProperties.getHosts().split(",");
            factory = new JestClientFactory();
            HttpClientConfig httpClientConfig = new HttpClientConfig
                    .Builder(Arrays.asList(hostArray))
                    .multiThreaded(elasticsearchProperties.getMultiThreaded())
                    .maxTotalConnection(elasticsearchProperties.getMaxTotalConnection())// 最大链接
                    .maxConnectionIdleTime(elasticsearchProperties.getMaxConnectionIdleTime(), TimeUnit.MINUTES)//链接等待时间
                    .connTimeout(elasticsearchProperties.getConnTimeout())
                    .discoveryEnabled(elasticsearchProperties.getDiscoveryEnabled())
                    .readTimeout(elasticsearchProperties.getReadTimeout())//60秒
                    .build();
            factory.setHttpClientConfig(httpClientConfig);//得到链接
        }
    }
    /**
     * 获取链接
     *
     * @return
     */
    public static JestClient getConnection() {
        return factory.getObject();
    }
}

+ 27 - 0
common-logback-starter/src/main/java/com.yihu.base/es/properties/BufferProperties.java

@ -0,0 +1,27 @@
package com.yihu.base.es.properties;
/**
 * Created by chenweida on 2018/2/24.
 * 缓冲区相关配置
 */
public class BufferProperties {
    private Long sleepTime = 1000L;//多久消费一次消息
    private Integer bufferSize = 100000;//缓冲区的大小
    public Long getSleepTime() {
        return sleepTime;
    }
    public void setSleepTime(Long sleepTime) {
        this.sleepTime = sleepTime;
    }
    public Integer getBufferSize() {
        return bufferSize;
    }
    public void setBufferSize(Integer bufferSize) {
        this.bufferSize = bufferSize;
    }
}

+ 38 - 0
common-logback-starter/src/main/java/com.yihu.base/es/properties/ElasticsearchAppenderProperties.java

@ -0,0 +1,38 @@
package com.yihu.base.es.properties;
/**
 * Created by chenweida on 2018/2/24.
 */
public class ElasticsearchAppenderProperties {
    //es相关的配置
    private ElasticsearchProperties elasticsearchProperties = new ElasticsearchProperties();
    //缓存区相关的配置
    private BufferProperties bufferProperties = new BufferProperties();
    //日志相关配置
    private MessageProperties messageProperties = new MessageProperties();
    public ElasticsearchProperties getElasticsearchProperties() {
        return elasticsearchProperties;
    }
    public void setElasticsearchProperties(ElasticsearchProperties elasticsearchProperties) {
        this.elasticsearchProperties = elasticsearchProperties;
    }
    public BufferProperties getBufferProperties() {
        return bufferProperties;
    }
    public void setBufferProperties(BufferProperties bufferProperties) {
        this.bufferProperties = bufferProperties;
    }
    public MessageProperties getMessageProperties() {
        return messageProperties;
    }
    public void setMessageProperties(MessageProperties messageProperties) {
        this.messageProperties = messageProperties;
    }
}

+ 131 - 0
common-logback-starter/src/main/java/com.yihu.base/es/properties/ElasticsearchProperties.java

@ -0,0 +1,131 @@
package com.yihu.base.es.properties;
import org.apache.commons.lang3.StringUtils;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
/**
 * Created by chenweida on 2018/2/24.
 * ES相关配置
 */
public class ElasticsearchProperties {
    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
    private String hosts; //http://59.61.92.90:9065,http://59.61.92.90:9067
    private String index;
    private String type;
    private String clusterName;
    private Integer maxTotalConnection = 50;//最大连接数
    private Integer maxConnectionIdleTime = 10;//链接最大等待时间
    private Integer connTimeout = 60 * 1000 * 10;//链接超时时间 默认10分种
    private Integer readTimeout = 60 * 1000 * 10;//60秒
    private Boolean multiThreaded = true;//是否多线程
    private Boolean discoveryEnabled = false;//是否开启自动发现模式  集群模式使用
    private String rolling;//日志按照什么滚动  day week month year
    public String getRolling() {
        return rolling;
    }
    public void setRolling(String rolling) {
        this.rolling = rolling;
    }
    public String getHosts() {
        return hosts;
    }
    public void setHosts(String hosts) {
        this.hosts = hosts;
    }
    public String getIndex() {
        if (StringUtils.isNoneEmpty(rolling)) {
            if ("day".equals(rolling)) {
                return new StringBuffer(index + "-" + LocalDate.now().toString()).toString();
            } else if ("week".equals(rolling)) {
                return new StringBuffer(index + "-" + LocalDate.now().minusWeeks(0).with(DayOfWeek.MONDAY)).toString();
            } else if ("month".equals(rolling)) {
                return new StringBuffer(index + "-" + LocalDate.now().with(TemporalAdjusters.firstDayOfMonth())).toString();
            } else if ("year".equals(rolling)) {
                return new StringBuffer(index + "-" + LocalDate.now().with(TemporalAdjusters.firstDayOfYear())).toString();
            }
        }
        return index;
    }
    public void setIndex(String index) {
        this.index = index;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getClusterName() {
        return clusterName;
    }
    public void setClusterName(String clusterName) {
        this.clusterName = clusterName;
    }
    public Integer getMaxTotalConnection() {
        return maxTotalConnection;
    }
    public void setMaxTotalConnection(Integer maxTotalConnection) {
        this.maxTotalConnection = maxTotalConnection;
    }
    public Integer getMaxConnectionIdleTime() {
        return maxConnectionIdleTime;
    }
    public void setMaxConnectionIdleTime(Integer maxConnectionIdleTime) {
        this.maxConnectionIdleTime = maxConnectionIdleTime;
    }
    public Integer getConnTimeout() {
        return connTimeout;
    }
    public void setConnTimeout(Integer connTimeout) {
        this.connTimeout = connTimeout;
    }
    public Integer getReadTimeout() {
        return readTimeout;
    }
    public void setReadTimeout(Integer readTimeout) {
        this.readTimeout = readTimeout;
    }
    public Boolean getMultiThreaded() {
        return multiThreaded;
    }
    public void setMultiThreaded(Boolean multiThreaded) {
        this.multiThreaded = multiThreaded;
    }
    public Boolean getDiscoveryEnabled() {
        return discoveryEnabled;
    }
    public void setDiscoveryEnabled(Boolean discoveryEnabled) {
        this.discoveryEnabled = discoveryEnabled;
    }
    public static void main(String[] args) {
        System.out.println( LocalDate.now().minusWeeks(0).with(DayOfWeek.MONDAY));
    }
}

+ 16 - 0
common-logback-starter/src/main/java/com.yihu.base/es/properties/MessageProperties.java

@ -0,0 +1,16 @@
package com.yihu.base.es.properties;
/**
 * Created by chenweida on 2018/2/24.
 */
public class MessageProperties {
    private String pattern;
    public String getPattern() {
        return pattern;
    }
    public void setPattern(String pattern) {
        this.pattern = pattern;
    }
}

+ 40 - 0
common-logback-starter/src/main/resources/elasticsearchAppender_logback_demo.xml

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 这个是根配置文件,一定要有的
    scan:是当配置文件被修改后会被重新加载
    scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
    debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="true" scanPeriod="6000" debug="false">
    <logger name="org.hibernate" level="WARN"/>
    <logger name="org.springframework" level="WARN"/>
    <logger name="io.searchbox" level="WARN"/>
    <appender name="elasticsearch" class="com.yihu.base.es.ElasticsearchAppender">
        <hosts>http://172.19.103.68:9200,http://172.19.103.68:9200</hosts> <!--支持集群 逗号分割-->
        <index>logs</index><!--es index 名称-->
        <type>logs</type><!--es type 名称-->
        <clusterName>jkzl</clusterName><!--es 集群 名称-->
        <!--按照什么模式区滚动 支持 按照
         每天:day
         每周:week
         每月:month
         每年:year
          -->
        <rolling>day</rolling>
        <maxTotalConnection></maxTotalConnection><!-- 最大连接数 默认50-->
        <maxConnectionIdleTime></maxConnectionIdleTime><!-- 链接最大等待时间 默认10分钟 单位 分钟-->
        <connTimeout></connTimeout><!-- 链接超时时间 默认10分种 单位毫秒-->
        <multiThreaded></multiThreaded><!-- 是否多线程 默认true-->
        <discoveryEnabled></discoveryEnabled><!-- 是否开启自动发现模式  集群模式使用 默认false-->
    </appender>
    <logger name="elasticsearch_logger" level="INFO" additivity="false">
        <appender-ref ref="elasticsearch"/>
    </logger>
    <!--提高整个日志的错误级别-->
    <root level="INFO">
    </root>
</configuration>

+ 0 - 33
common-logback-starter/src/main/resources/logback.xml

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="6000" debug="true" >
    <!--
    name:logger的名称
    level:输出级别是INFO
    additivity属性为false,表示此loger的打印信息不再向上级传递,是否继承父类的日志级别
    -->
    <property name="LOG_HOME" value="C:/logbackLog" />
    <!-- 演示按时间滚动的策略 -->
    <appender name="dailyRollingFileAppender" class="com.yihu.base.Log2ElasticsearchAppender">
    <!--<appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
        <File>${LOG_HOME}/usercenter.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <FileNamePattern>${LOG_HOME}/dailyRollingFileAppender.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!-- 保留 30天数据,默认无限-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>
        </encoder>
    </appender>
     <logger name="demo1" level="INFO" additivity="false" >
      <appender-ref ref="dailyRollingFileAppender" />
     </logger>
    <root>
        <level value="INFO" />
        <appender-ref ref="dailyRollingFileAppender" />
    </root>
</configuration>

+ 0 - 5
common-logback-starter/src/main/resources/template.yml

@ -1,5 +0,0 @@
log2es:
  index: log_index
  type: log_type
  activemq:
    queueName: myQueue

+ 30 - 0
demo/pom.xml

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>jkzl-start</artifactId>
        <groupId>com.yihu</groupId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>demo</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.yihu</groupId>
            <artifactId>common-logback-starter</artifactId>
            <version>1.0.1</version>
        </dependency>
    </dependencies>
</project>

+ 20 - 0
demo/src/main/java/com/demo/DemoApplication.java

@ -0,0 +1,20 @@
package com.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
/**
 * Created by chenweida on 2018/2/24.
 */
@SpringBootApplication
public class DemoApplication {
    public static ApplicationContext ctx = null;
    public static void main(String[] args) {
        ctx = SpringApplication.run(DemoApplication.class, args);
    }
}

+ 26 - 0
demo/src/main/java/com/demo/controller/DemoController.java

@ -0,0 +1,26 @@
package com.demo.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
 * Created by chenweida on 2018/2/24.
 */
@RestController
public class DemoController {
    private Logger logger = LoggerFactory.getLogger("elasticsearch_logger");
    @RequestMapping(value = "/loginfo", method = RequestMethod.GET)
    public String loginfo() {
        logger.info("{\"aaa\":\"123\",\"bbb\":\"123\",\"ccc\":\"123\"}");
        logger.error("{\"aaa\":\"321\",\"bbb\":\"321\",\"ccc\":\"321\"}");
        return "成功";
    }
}

+ 2 - 0
demo/src/main/resources/application.yml

@ -0,0 +1,2 @@
server:
  port: 8080

+ 35 - 0
demo/src/main/resources/logback.xml

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <logger name="org.hibernate" level="WARN"/>
    <logger name="org.springframework" level="WARN"/>
    <logger name="io.searchbox" level="WARN"/>
    <appender name="elasticsearch" class="com.yihu.base.es.ElasticsearchAppender">
        <hosts>http://172.19.103.68:9200</hosts>
        <index>logs</index>
        <type>logs</type>
        <clusterName>jkzl</clusterName>
        <rolling>day</rolling>
    </appender>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy/MM/dd-HH:mm:ss} %level [%thread] %caller{1} - %msg%n</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
    </appender>
    <logger name="elasticsearch_logger" level="INFO" additivity="false">
        <appender-ref ref="elasticsearch"/>
        <appender-ref ref="console"/>
    </logger>
    <!--提高整个日志的错误级别-->
    <root level="INFO">
    </root>
    <!--扩展flume  end-->
</configuration>

+ 1 - 0
pom.xml

@ -49,6 +49,7 @@
        <module>/common-data-mysql-starter</module>
        <module>/common-data-redis-starter</module>
        <module>/common-data-hbase-starter</module>
        <module>demo</module>
    </modules>
    <properties>