ELK日誌處理之使用logstash收集log4J日誌

介紹一下如何從Java工程中導出log4J日誌到Logstash。

一、log4j基礎

不能免俗的官方介紹:

Log4j 是一個使用 Java 語言編寫的,可靠、快速、靈活的日誌框架(API),使用 Apache Software License 授權。它被移植到 C、C++、C#、Perl、Python、Ruby 和 Eiffel 語言中。

Log4j 是高度可配置的,在運行期使用外部的配置文件對其進行配置。它按照優先級別記錄日誌,並可將日誌信息定向輸出到各種介質,比如數據庫、文件、控制檯、Unix Syslog等。

Log4j 主要由三部分組成:

  1. loggers:負責採集日誌信息。
  2. appenders:負責將日誌信息發佈到不同地方。
  3. layouts:負責以各種風格格式化日誌信息。

二、新建Java工程

下面通過實際的工程配置學習如何配置log4j。 
打開Eclipse或者Intellij Idea,新建一個maven工程。工程目錄結構如下圖所示: 
這裏寫圖片描述 
pom.xml文件中加入log4j的依賴,版本爲1.2.17,pom.xml中的代碼如下:

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.logs</groupId>
    <artifactId>log4idemo1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

</project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

在resource目錄下新建log4j.properties,加入以下配置:

### 設置###
log4j.rootLogger = debug,stdout,D,E,logstash

### 輸出信息到控制擡 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 輸出DEBUG 級別以上的日誌到=/Users/bee/Documents/elk/log4j/debug.log###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /Users/bee/Documents/elk/log4j/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 輸出ERROR 級別以上的日誌到=/Users/bee/Documents/elk/log4j/error.log  ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =/Users/bee/Documents/elk/log4j/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

#輸出日誌到logstash
log4j.appender.logstash=org.apache.log4j.net.SocketAppender
log4j.appender.logstash.RemoteHost=127.0.0.1
log4j.appender.logstash.port=4560
log4j.appender.logstash.ReconnectionDelay=60000
log4j.appender.logstash.LocationInfo=true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

配置文件中,把日誌輸出了四份:

  1. 第一份輸出到控制檯
  2. 第二份把DEBUG 級別以上的日誌到文件
  3. 第三份把輸出ERROR 級別以上的日誌到文件
  4. 第四份輸出到logstash

在java目錄下添加Log4jTest.java,內容如下:

import org.apache.log4j.Logger;
/**
 * Created by bee on 17/3/6.
 */
public class Log4jTest {
    public static final Logger logger=Logger.getLogger(Log4jTest.class);

    public static void main(String[] args) {
        logger.debug("This is a debug message!");
        logger.info("This is info message!");
        logger.warn("This is a warn message!");
        logger.error("This is error message!");

        try{
           System.out.println(5/0);
        }catch(Exception e){
            logger.error(e);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

三、配置logstash

(logstash的安裝和hello world教程請點這裏http://blog.csdn.net/napoay/article/details/53276758)這裏使用logstash2.3.3和Elasticsearch 2.3.3,首先啓動Elasticsearch,然後在logstash-2.3.3/conf目錄下新建配置文件log4j-es.conf,文件內容如下:

input {
    log4j {
        host => "127.0.0.1"
        port => 4560
    }
}

output {
    stdout {
      codec => rubydebug
    }
    elasticsearch{
        hosts => ["localhost:9200"]
        index => "log4j-%{+YYYY.MM.dd}"
        document_type => "log4j_type"
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

配置文件中指定日誌輸出有2份,一份輸出到console,一份輸出到Elasticsearch。 
啓動logstash:

sudo ./bin/logstash -f conf/log4j-es.conf
  • 1

如果你已經啓動了Elasticsearch,IP和端口都是通暢的,配置文件無誤,啓動成功後的界面如下: 
這裏寫圖片描述

運行Log4jTest.java,在終端中可以看到以下輸出:

這裏寫圖片描述

在Elasticsearch中查看導入的日誌: 
這裏寫圖片描述

四、總結

上述配置完成了日誌的產生,到logstash,再到Elasticsearch,介紹完畢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章