日志管理《十四》

良好的日志记录可以及时的发现系统中存在的问题,在分布式架构中由于有众多的服务模块,每个模块都有自己的日志管理机制,查询追踪的时候非常麻烦,为此可以结合spring boot的日志管理系统,并引入ELK统一手机日志信息,使整个日志分析工作变得简单。

spring boot 日志

spring boot 使用commons-logging 和slf4j 提供通用接口,日志具体实现则可由开发者自由选择log4j或者logback方案。两种日志方案都可以通过配置使用控制台或者文件输出日志内容。

log back是由log4j 的创始人开发的新一代的日志框架,用于替代log4j。它效率更高,能够适应诸多的运行环境,也是springboot 推荐的日志实现方案。

%d

时间日期,精确到毫秒

%p

日志级别,error,warn,info,budug或trace

${PID}

进程ID

---

分隔符,标识实际日志开始

%t

线程名,方括号括起来(可能会截断控制台输出)

%c

Logger名,通常使用源代码的类名

%msg

日志内容

%n

换行

在application.properties中通过logging.pattern.console 参数设置控制台输出日志的格式,并通过logging.pattern.file参数设置输出到日志文件的格式。

输出到文件:

默认情况下,spring boot 仅仅将日志输出在控制台。如果需要将日志输出到文件,需要在application.properties 中配置logging.file或者logging.path

logging.file:输出到指定的路径及文件名,可以为相对路径或者绝对路径。

logging.path:输出到指定的路径,默认的文件名为spring.log

日志文件达到10Mb 时,将会新开启一个文件输出,默认的日志输出级别为error,warn和info,可以通过logging.level.*参数修改输出级别。

logging.level.root=WARN
logging.level.org.springframework=DEBUG
logging.level.org.hibernate=EEROR

Logging.level.root

控制root logger的日志级别为warn以上

Logging.level.org.springframework

控制org.springframework包下的日志级别

Logging.level.org.hibernate

控制org.hibernate包下的日志级别

TRACE < DEBUG < INFO < WARN < ERROR < FATAL

日志等级时依次包含关系,设定了等级为warn,则会输出warn,error,fatal 级别的信息。

debug 级别信息可以通过debug=true 参数或在spring boot应用启动时,使用java -jar target/appName.jar --debug 命令开启。

扩展配置:

spring boot 约定了许多参数以减少开发中过多的配置量,对于日志系统也是如此,根据日志实现方案只需创建不同的配置文件便可实现对日志的扩展。

Log back

Log back-spring.xml,logback-spring.groovy,logback.xml,logback.groovy

Log4j

Log4j-spring.properties,log4j-spring.xml,log4j.properties,log4j.xml

Log4j2

Log4j2-spring.xml,log4j2.xml

JDK(java util logging)

Logging.properties

spring boot 官方推荐优先使用带有-spring 的文件名作扩展的日志配置(如使用logback-spring.xml,而不是logback.xml)

configuration: 配置文件树结构中的顶层标签。

scan

当此属性设置为true时,配置文件如果发生改变,将会被重新加载加载

ScanPeriod

设置检测配置文件是否有修改的时间间隔,如果没有给出时间单位,则默认间隔为1分钟

Debug

当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态

property:自定义参数

include:引入其他配置文件。

jmxConfigurator:开启logback的JMX支持。

通过命令jconsole打开GUI界面。

logger :控制org.springframework 包下的日志级别,与logging.level.*参数一致。

appender 配置输出日志的方案,可以有多个。

RollingFileAppender

输出到文件

rollingPolicy

定义日志切分规则,通过TimeBasedRollingPolicy指定每天产生一个日志文件,并且通过maxHistory限定只保留最近30天的日志

Filter

定义输出到日志的级别

Encoder

定义日志格式

Consoleappender

输出到控制台

root 必要节点,同故宫appender-ref使配置的appender生效。

分布式日志管理:

分布式架构下的各个应用模块都记录着自身的日志,当这些应用部署在不同的机器上时,想要排查程序的运行日志就变得极为麻烦。ELK(elasticSearch logstash kibana) 提供了统一的日志管理方案来解决这个问题。并且能够很好的支持log4j和log back等日志框架。

elasticSerach:负责存储日志信息,并提供检索服务。

logstash:负责收集应用发送的日志,并存入elastic Search中。

kibana:提供一个可视化界面更为方便的分析日志。

ELK搭建:

elk之间存在一定的版本依赖关系,并且也建议将服务于业务及日志的ElasticSearch区分开来。

安装elasticSerach:

下载地址:https://www.elastic.co/downloads/elasticsearch ,双击C:\tools\elasticSearch\elasticsearch-6.3.2\bin下的elasticsearch.bat,在浏览器通过:http://localhost:9200/进行访问。

{
  "name" : "uJtVooK",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "pf0NxHaVRhKXoXZ2wQRwbA",
  "version" : {
    "number" : "6.3.2",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "053779d",
    "build_date" : "2018-07-20T05:20:23.451332Z",
    "build_snapshot" : false,
    "lucene_version" : "7.3.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

安装Logstash。

下载地址:https://www.elastic.co/cn/downloads/logstash

解压,在C:\tools\logstash\logstash-6.3.2\config新建:log_to_es.conf

input{
  tcp{
      port => 8082
      ssl_enable => false
      codec => json{
      charset => "UTF-8" 
    }

  }
}

output{
  elasticsearch{
   index => "logstash-log"
   hosts => "127.0.0.1:9200"
 } 
}

配置完成后在C:\tools\logstash\logstash-6.3.2\bin目录下,cmd运行: .\logstash -f ..\config\log_to_es.conf  启动logstash,

并且通过-f命令指定刚才编写的配置文件。

Input

开启一个用于收集日志信息的tcp服务

Port

自定义一个用于接受日志的端口号

Ssl_enable

关闭ssl

Codec

基于json格式化日志信息,并指定编码格式为utf-8

Output

将收集的tcp服务发送到elasticsearch中

Index

同于存储日志的索引名称

Hosts

Elaticsearch 所在地址

安装kibana。

下载地址:https://www.elastic.co/cn/downloads/kibana

解压,进入C:\tools\kibana\kibana-6.3.2-windows-x86_64\config下,修改kibana.yml:

elasticsearch.url:"http://localhost:9200"

进入:C:\tools\kibana\kibana-6.3.2-windows-x86_64\bin,cmd 运行:.\kibana

在浏览器访问:http://localhost:5601

通过index pattern 指定的logstash-* 表示,kibana 将从elasticsearch 中获取以logstash 开头的所有索引。

logback-spring.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false" >

    <property name="APP_NAME" value="LogDemo"/>
    <contextName>${APP_NAME}</contextName>

    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <jmxConfigurator/>

    <logger name="org.springframework" level="INFO" />

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${user.home}/logs/${APP_NAME}.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${APP_NAME}.%d{yyyy-MM-dd}.log</FileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <Pattern>%d %p ${PID} --- [%t] %c %msg %n</Pattern>
        </encoder>
    </appender>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>%d %p ${PID} --- [%t] %c %msg %n</Pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

</configuration>
<configuration debug="false">
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashSocketAppender">
        <destination>localhost:8082</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>

    <root>
        <appender-ref ref="LOGSTASH"/>
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

配置中使用LogstashSocketAppender以TCP方式向logstash发送日志信息。

destination:logstash中用于接受日志的地址及端口号

encoder:指定日志编码格式。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值