application-mmm.yml 中日志配置
logging:
config: http://${spring.cloud.nacos.discovery.server-addr}/nacos/v1/cs/configs?group=DEFAULT_GROUP&tenant=${spring.cloud.nacos.discovery.namespace}&dataId=logback-logstash.xml
logback-logstash.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
以外部载入指定logback.xml java -jar -Dlogging.config=logback.xml
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 定义日志文件的项目名 -->
<springProperty scope="context" name="applicationName" source="spring.application.name"/>
<!-- 定义日志文件的存储地址,默认jar同级目录logs文件夹,如需更改路径加参数: -Dlogging.path=/var/logs 没有设定直接在将日志存放到jar同级目录logs下 -->
<property name="logPath" value="${logging.path:-./logs}"/>
<!-- 定义日志归档大小 单位KB,MB,GB 默认200MB 如需更改大小加参数: -Dlogging.maxFileSize=200MB -->
<property name="maxFileSize" value="${logging.maxFileSize:-200MB}"/>
<!-- 定义日志最多保留天数 默认保留天数60天,如需更改加参数 -Dlogging.maxHistory=60-->
<property name="maxHistory" value="${logging.maxHistory:-60}"/>
<!-- 定义日志最大总大小 默认40GB,如需更改加参数 -Dlogging.totalSizeCap=40GB-->
<property name="totalSizeCap" value="${logging.totalSizeCap:-40GB}"/>
<property name="appName" value="${applicationName}"/>
<!-- 定义日志格式-->
<!--格式化输出:开通已[%d{yyyy-MM-dd HH:mm:ss.SSS}] 为了logstash使用grok遇到堆栈多行异常时匹配合并多行, %d表示日期,${APP_ANME}表示服务名, %thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%ex:堆栈信息 %n是换行符-->
<property name="CONSOLE_LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] ${appName} [%X{reqType} %X{hostIp} %X{hostPort} %X{reqUri} %X{queryString} ] [%X{userId}] [%thread] %-5level %logger - %msg%n"/>
<!--输出到控制台-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 输出到文件-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/${appName}.log</file>
<append>true</append>
<!--基于大小以及时间的轮转策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名 %d表示按天轮转 %i表示在当前时间还没有到达周期轮转之前,日志文件达到了 maxFileSize 指定的大小,会进行归档,递增索引从 0 开始-->
<fileNamePattern>${logPath}/${appName}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- maxFileSize 指定的大小进行归档-->
<maxFileSize>${maxFileSize}</maxFileSize>
<!--这个可选的属性用来控制最多保留多少数量的归档文件,将会异步删除旧的文件 当天按天轮转表示有效期60天-->
<maxHistory>${maxHistory}</maxHistory>
<!--当达到这个大小后,旧的归档文件将会被异步的删除 -->
<totalSizeCap>${totalSizeCap}</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<logger name="com.loit" level="DEBUG" />
<!-- 日志输出级别 -->
<root level="info">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
logback配置
input {
file {
path => ["/home/soft/gateway/logs/*.log","/home/soft/portal/logs/*.log"]
discover_interval => 15
stat_interval => 1
codec => multiline {
pattern => "^\["
negate => true
what => "previous"
charset => "UTF-8"
}
type => "elasticsearch"
start_position => "beginning"
}
}
filter {
# pattern matching logback pattern
grok {
match => {
"message" => "\[%{TIMESTAMP_ISO8601:exeTime}\]\s+%{DATA:appName}\s+\[%{DATA:reqInfo}\]\s+\[%{DATA:userId}\]\s+\[%{DATA:thread}\]\s+%{LOGLEVEL:logLevel}\s+%{DATA:class}\s+-\s+%{GREEDYDATA:msg}"
}
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["ip:9200","ip:9200","ip:9200"]
index => "loitportal-%{+YYYY.MM}-%{+xxxx.ww}"
}
}