1. springboot配置文件

log4j2可以有多个配置文件根据环境的不同(本地环境、测试环境、线上环境)可以选择不同的配置,在application中可以使用以下属性进行配置:

logging.config=classpath:log4j2-dev.xml

2. log4j2文件格式

log4j2配置文件后缀名只能为".xml",".json"或者".jsn"。

系统选择配置文件的优先级(从先到后)如下:

  • (1).classpath下的名为log4j2-test.json 或者log4j2-test.jsn的文件。

  • (2).classpath下的名为log4j2-test.xml的文件。

  • (3).classpath下名为log4j2.json 或者log4j2.jsn的文件。

  • (4).classpath下名为log4j2.xml的文件。

3. log4j2配置详解

3.1 level属性

共有8个级别,按照从低到高为:ALL< TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。

程序会打印高于或等于所设置级别的日志,也就是说设置的日志等级越高,打印出来的日志就越少。

  • ALL:最低等级的,用该级别会打开所有日志记录。

  • TRACE:追踪日志。

  • DEBUG:指出细粒度信息事件日志。对调试应用程序非常有帮助的。

  • INFO:消息在粗粒度级别上的日志。

  • WARN:警告日志。

  • ERROR:错误日志。

  • FATAL:严重错误日志。会导致应用程序的退出的错误日志。

  • OFF:最高等级的,用于关闭所有日志记录。

3.2 Configuration

Configuration是根节点。它有两个属性(status、monitorinterval)和两个子节点(Appenders、Loggers)。

status属性:用来指定log4j2本身的日志打印级别。例如status="WARN"

monitorinterval属性:在log4j2中更改配置文件是不用重启的,也就是说log4j2会定时查看自身的配置。 monitorinterval就是用来指定监测间隔时间的,单位是s,最小是5s。例如monitorinterval=“6”

3.2.1 Appenders节点

Appenders是Configuration的子节点,它常见的节点有三种,分别是Console、File、RollingFile。

3.2.2 Console

Console节点是用来定义输出到控制台的。

name属性:指定Console的名字。例如name=“test”

target属性:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认值:SYSTEM_OUT。

3.2.3 File

File节点是用来定义日志输出的目标文件的。

name属性:指定Console的名字。例如name=“file”

3.2.4 RollingFile

RollingFile节点是用来根据指定规则(时间或者大小)来自动保存当前日志并创建新日志。

name属性:指定Console的名字。例如name=“rollingFile”。

fileName属性:用来指定日志的目标文件路径。例如fileName="/home/logTest.log"。

filePattern属性:用来指定新建日志文件的文件路径。例如filePattern="/home/logTest.log.%d{yyyy-MM-dd}"

Policies

Policies节点是RollingFile的子节点。用来指定滚动日志的策略,就是什么时候进行新建日志。有两个子节点TimeBasedTriggeringPolicy、SizeBasedTriggeringPolicy

TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 ,一般和modulate=true一起使用。如果filePattern是精确到天,那么,interval=1就代表一天一次;interval=2代表两天一次;如果filePattern是精确到小时,那么,interval=1就代表一小时一次;interval=2代表两小时一次。

例如按天:

<RollingFile name="File" fileName="/home/logTest.log"filePattern="/home/logTest.log.%d{yyyy-MM-dd}"><PatternLayout pattern="[%d{dd/HH:mm:ss} %p] %m%n"/><Policies><TimeBasedTriggeringPolicy modulate="true" interval="1"/></Policies></RollingFile>

例如按2小时:

<RollingFile name="File" fileName="/home/logTest.log"filePattern="/home/logTest.log.%d{yyyy-MM-dd-HH}"><PatternLayout pattern="[%d{dd/HH:mm:ss} %p] %m%n"/><Policies><TimeBasedTriggeringPolicy modulate="true" interval="2"/></Policies></RollingFile>

SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小。如果超过size指定的大小就会滚动一次。

例如按大小100M:

<RollingFile name="File" fileName="/home/logTest.log"filePattern="/home/logTest.log.%d{yyyy-MM-dd-HH}"><PatternLayout pattern="[%d{dd/HH:mm:ss} %p] %m%n"/><Policies><SizeBasedTriggeringPolicy size="100 MB" /></Policies></RollingFile>

DefaultRolloverStrategy:max属性可以用来指定同一个文件夹下最多有几个日志文件,超出时就删除最旧的,创建新的。如果<DefaultRolloverStrategy max="20"/>filePattern="/home/logTest.log.%d{yyyy-MM-dd}-%i.log",那么home底下最多20个文件。

<RollingFile name="File" fileName="/home/logTest.log"filePattern="/home/logTest.log.%d{yyyy-MM-dd-HH}"><PatternLayout pattern="[%d{dd/HH:mm:ss} %p] %m%n"/><Policies><TimeBasedTriggeringPolicy modulate="true" interval="2"/></Policies><DefaultRolloverStrategy max="20"/></RollingFile>

3.2.5 Appenders子节点的公共节点

PatternLayout

1.PatternLayout是用来指定日志格式的。默认为<PatternLayout pattern="%m%n"/>

2.PatternLayout的参数:

参数 说明 例子
%c
列出logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间
log4j配置文件参数举例
输出显示媒介
假设当前logger名字空间是"a.b.c"
%c a.b.c
%c{2} b.c
%20c (若名字空间长度小于20,则左边用空格填充)
%-20c (若名字空间长度小于20,则右边用空格填充)
%.30c (若名字空间长度超过30,截去多余字符)
%20.30c (若名字空间长度小于20,则左边用空格填充;若名字空间长度超过30,截去多余字符)
%-20.30c (若名字空间长度小于20,则右边用空格填充;若名字空间长度超过30,截去多余字符)
%C
列出调用logger的类的全名(包含包路径) 假设当前类是"org.apache.xyz.SomeClass"
%C org.apache.xyz.SomeClass
%C{1} SomeClass
%d
显示日志记录时间,{<日期格式>}使用ISO8601定义的日期格式 %d{yyyy/MM/dd HH:mm:ss,SSS} 2005/10/12 22:23:30,117
%d{ABSOLUTE} 22:23:30,117
%d{DATE} 12 Oct 2005 22:23:30,117
%d{ISO8601} 2005-10-12 22:23:30,117
%F
显示调用logger的源文件名 %F MyClass.java
%l
输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数 %l MyClass.main(MyClass.java:129)
%L
显示调用logger的代码行 %L 129
%m
显示输出消息 %m This is a message for debug.
%M
显示调用logger的方法名 %M main
%n
当前平台下的换行符 %n Windows平台下表示rn
UNIX平台下表示n
%p
显示该条日志的优先级 %p INFO
%r
显示从程序启动时到记录该条日志时已经经过的毫秒数 %r 1215
%t
输出产生该日志事件的线程名 %t MyClass
%x
按NDC(Nested Diagnostic Context,线程堆栈)顺序输出日志 假设某程序调用顺序是MyApp调用com.foo.Bar
%c %x - %m%n MyApp - Call com.foo.Bar.
com.foo.Bar - Log in Bar
MyApp - Return to MyApp.
%X
按MDC(Mapped Diagnostic Context,线程映射表)输出日志。通常用于多个客户端连接同一台服务器,方便服务器区分是那个客户端访问留下来的日志。 %X{5} (记录代号为5的客户端的日志)
%%
显示一个百分号 %% %

Filters

Filters是一组过滤器,其中一个ThresholdFilter是一个过滤器。

ThresholdFilter是Filters的子节点,有三个属性level、onMatch、onMismatch。onMatch和onMismatch都有三个值:ACCEPT(接受),DENY(拒绝),NEUTRAL(中立)。

level代表要匹配的日志级别。

onMatch代表对level对应的日志级别及以上要进行的操作。如果是ACCEPT(接受)就会输出日志;如果是DENY(拒绝)就会不会输出,如果是NEUTRAL(中立)就会交给下一个ThresholdFilter处理。

例:

<!--匹配ERROR及以上级别-->
<ThresholdFilter level="ERROR" onMatch="ACCEPT"   onMismatch="DENY"/>

onMismatch代表对level对应的日志级以下要进行的操作。如果是ACCEPT(接受)就会输出日志;如果是DENY(拒绝)就会不会输出,如果是NEUTRAL(中立)就会交给下一个ThresholdFilter。

例:

<!--匹配ERROR以下级别-->
<ThresholdFilter level="ERROR" onMatch="DENY"   onMismatch="ACCEPT"/>

组合:

<!--匹配INFO级别,其它下级别拒绝--><!--不匹配Warn及以上级别,Warn以下级别下一个ThresholdFilter处理-->
<ThresholdFilter level="WARN" onMatch="DENY"   onMismatch="NEUTRAL"/>
<!--匹配INFO及以上级别,INFO以下级别拒绝-->
<ThresholdFilter level="INFO" onMatch="ACCEPT"   onMismatch="DENY"/>

3.3 Loggers

Loggers节点可以根据文件来控制日志。

3.3.1 Root

Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出

level属性:日志输出级别。

AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender。

3.3.2 Logger

Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。

level属性:日志输出级别。

name属性:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.

AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。

4. 阿里云日志配置详解

如果log4j2要配合阿里云日志使用,需要导入阿里jar包,然后在Appenders 中添加Loghub

     <!--aliyunLog4j--><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>2.5.0</version></dependency><dependency><groupId>com.aliyun.openservices</groupId><artifactId>aliyun-log-log4j2-appender</artifactId><version>0.1.11</version></dependency>
<Appenders><Loghub name="Loghub"#指定日志服务的项目名称(必需)project="your project"#指定日志服务的日志存储,必需logStore="your logStore"#指定日志服务的HTTP端点(必需)endpoint="your project endpoint"#指定日志服务的帐户信息keyId(必需)accessKeyId="your accessKey id"#指定日志服务的帐户信息key(必需)accessKeySecret="your accessKey secret"#单个producer实例可以容纳的日志大小上限,默认为100MBtotalSizeInBytes="104857600"#如果生产者没有足够的空闲空间,调用方在发送方法上的最大阻塞时间,默认值为60秒。maxBlockMs="60000"#执行日志发送任务的线程池大小,默认值是可用的处理器数。ioThreadCount="8"#当生产者批次处理中的缓存日志的大小大于或等于batchsizethreshold oldinbytes时,将发送该批处理,默认为512KB,最大可设置为5MB。batchSizeThresholdInBytes="524288"#当生产批次中缓存的日志条目数大于或等于batchCountThreshold时,将发送批次。batchCountThreshold="4096"#生产批次从创建到发送有一个驻留时间,默认值为2秒,最小值为100毫秒。lingerMs="2000" #如果第一次发送失败,则可以重试生产批次的次数,默认值为10。retries=10#第一次重试的回退时间,默认为100毫秒。baseRetryBackoffMs="100"#重试的最大退避时间,默认为50秒。maxRetryBackoffMs="100"#指定日志的主题,默认为""topic="your topic"#指定日志的源,默认为主机ipsource="your source"#指定字段time的时间格式,默认为yyyy-MM-dd'T'HH:MM:ssZtimeFormat="yyyy-MM-dd'T'HH:mmZ"#指定字段时间的时区,默认为UTCtimeZone="UTC"#是否忽略异常ignoreExceptions="true">#日志格式<PatternLayout pattern="%d %-5level [%thread] %logger{0}: %msg"/></Loghub>
</Appenders>
<Loggers><Root level="warn"><AppenderRef ref="Loghub"/></Root>
</Loggers>

5. springboot+log4j2+阿里云日志示例

5.1 springboot

示例中使用xml,并且将部分info日志及error日志打印到阿里日志库

1.修改pom文件,去除springboot自带的日志,以及引入ali日志的jar

     <!--去除springboot自带的日志--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><!--使用log4j2--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency><!--aliyunLog4j--><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>2.5.0</version></dependency><dependency><groupId>com.aliyun.openservices</groupId><artifactId>aliyun-log-log4j2-appender</artifactId><version>0.1.11</version></dependency>

2.在启动文件加上@Log4j2。springboot 2.0之前可以不加,springboot 2.0之后必须要加

3.构建xml配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%p %m%n"/><ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/></Console><Loghub name="LogHub"project="ali项目名"logstore="ali日志库名"endpoint="地址"accessKeyId="ali日志的accessKeyId"accessKeySecret="ali日志的accessKey"timeZone="时区"><Filters><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/></Filters></Loghub><Loghub name="LogHubError"project="ali项目名"logstore="ali日志库名"endpoint="地址"accessKeyId="ali日志的accessKeyId"accessKeySecret="ali日志的accessKey"timeZone="时区"><Filters><ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/></Filters></Loghub><RollingFile name="File" fileName="/home/log/logName.log"filePattern="/home/log/logName.log.%d{yyyy-MM-dd}"><PatternLayout pattern="[%d{dd/HH:mm:ss} %p] %m%n"/><Policies><TimeBasedTriggeringPolicy modulate="true" interval="1"/></Policies></RollingFile></Appenders><Loggers><Logger name="info" level="INFO"><AppenderRef ref="LogHub"/></Logger><Logger name="org.springframework" level="INFO"></Logger><Logger name="com.test.mapper" level="DEBUG"></Logger><Root level="INFO"><AppenderRef ref="LogHubError"/><AppenderRef ref="File"/></Root></Loggers>
</Configuration>

4.打印日志

private static Logger loggerInfo= LogManager.getLogger("info");private static Logger loggerError= LogManager.getLogger("error");public static void main(String[] args) {loggerInfo.info("11111111");loggerInfo.error("22222222");loggerError.error("33333333");}

Loggers中规定name=“info"且日志级别在INFO以上的会在LogHub进行过滤。而且,所有日志INFO以上的会进入LogHubError进行过滤。所以,LogHub中会收集到字符串"11111111”、“22222222”;LogHubError中会收集到字符串"33333333"、“22222222”。"22222222"在LogHub、LogHubError都会出现。

/home/log/logName.log文件中会储存所有的日志,并且每天都会生成一个日志文件。

<Logger name="org.springframework" level="INFO"></Logger>表示将spring框架的日志只打印INFO级别以上的。
<Logger name="com.test.mapper" level="DEBUG"></Logger>表示在数据持久化时日志打印DEBUG级别以上的。

5.2 注意事项

com.aliyun.openservices如果用0.1.10版本,project要改为projectName,accessKeySecret要该为accessKey

参考文章:log4j2配置属性详解

springboot+log4j2+阿里云日志相关推荐

  1. 自建ELK迁移阿里云日志服务

    简介:本文介绍如何将自建的ELK系统迁移到阿里云SLS日志服务. 直达最佳实践:[自建ELK迁移阿里云日志服务] 最佳实践频道:[点击查看更多上云最佳实践] 这里有丰富的企业上云最佳实践,从典型场景入 ...

  2. 阿里云日志添加要查询字段

    第一步:在API基控制器(base文件下)下面 $arr 就是我要接受的所有参数值,而 'msg_id'就是我以后要在阿里云日志中查询的字段,以此字段统计某些数据 $arr 是前台API接口传过来的数 ...

  3. 容器服务Windows Kubernetes使用阿里云日志服务来收集容器日志

    目前,容器服务Windows Kubernetes支持将业务容器产生的stdout输出.日志文件同步到阿里云日志服务(SLS)进行统一管理. 支撑组件安装 在Windows Kubernetes集群安 ...

  4. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    SpringBoot整合阿里云OSS文件上传.下载.查看.删除 该项目源码地址:https://github.com/ggb2312/springboot-integration-examples ( ...

  5. SpringBoot整合阿里云OSS上传文件

    一.需求分析 文件上传是一个非常常见的功能,就是通过IO流将文件写到另外一个地方,这个地方可以是项目下的某个文件夹里,或者是本地电脑某个盘下面,还可以是云服务OSS里面,这里就是我要讲到的OSS,我写 ...

  6. 阿里云日志服务grafana可视化探索

    一.背景 网站前端启用了阿里云的负载均衡,各类日志很方便的接入阿里云的日志服务,目前对于日志服务后台提供的可视化不甚满意,故探索grafana对其可视化. 二.目的 1.根据nginx日志(slb)来 ...

  7. SpringBoot整合——阿里云对象存储(OSS)

    SpringBoot整合--阿里云对象存储 1 OSS介绍 在开发应用的过程中,我们经常会有用户需要实名认证之后才能访问的需求. 用户认证需要上传证件图片.首页轮播也需要上传图片,因此我们要做文件服务 ...

  8. SpringBoot整合阿里云视频点播

    文章目录 SpringBoot整合阿里云视频点播 1.准备工作 2.服务端SDK的使用 2.1 导入依赖 2.2 初始化类 2.3 创建读取公共常量的工具类 2.4 获取视频播放地址 2.5 获取视频 ...

  9. SpringBoot整合阿里云短信服务详细过程(保证初学者也能实现)

    前言 网上关于实操性的文章普遍大部分都记录不全,要么只记录重点部分,对于刚学习的小伙伴来说看起来是比较困难的 所以,基于这一点. 该文章会详细介绍使用SpringBoot整合阿里云短信服务的每一步过程 ...

最新文章

  1. 世界机器人领域12个前沿技术趋势
  2. Furein平台-比特币现金晋级毕竟在吵什么
  3. eclipse 插件扩展新建java页面_java-Eclipse插件-弹出菜单扩展
  4. 对线性回归,logistic回归和一般回归的认识
  5. c语言----预处理
  6. matlab作业参考4,matlab第四章作业
  7. 列表解析python_基于Python列表解析(列表推导式)
  8. (15)QuartusII 17.1开发流程(FPGA不积跬步101)
  9. 华南理工计算机研究生专业课,华南理工大学(专业学位)计算机技术研究生考试科目和考研参考书目...
  10. linux spi驱动开发学习-----spidev.c和spi test app
  11. 背包问题九讲[转载]
  12. 【Python爬虫系列】Python 爬取上海链家二手房数据
  13. 对于line-height的认识
  14. 用开源力量抗击新冠疫情!腾讯作为创始成员加入Linux基金会公共卫生计划
  15. /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found问题解决方法
  16. 浅记项目管理交付标准
  17. JavaScript:利用JavaScript实现的功能、算法和奇淫技巧(持续更新)
  18. Android的Recovery中font_10x18.h字库文件制作
  19. 数据库原理与应用第2版(雷景生)课后答案(第三、第四章)
  20. suse linux双网卡绑定,suse linux双网卡绑定设置详解

热门文章

  1. 码云图床php,PHP 脚本实现 Markdown 文章上传到七牛图床
  2. 游戏运行为什么会卡、有什么解决办法
  3. 大疆tello的pc端控制方法(代码)
  4. 服务器怎么删除游戏文件夹在哪里找,手机文件管理在哪里应该怎么清理(怎么删除手机没用的文件)...
  5. 什么是DQL?其含义及其常用命令解析
  6. 计费管理系统(武汉理工大学计算机基础与综合编程实验)
  7. 迅捷word转换成pdf转换器最新版
  8. Android保存配置文件内容到本地(txt、xml两种)
  9. ES5、ES6自学笔记
  10. 记一次ES整合logstash所遇的坑