什么是log4j2

log4j是Apache提供的一个日志实现,是一个基于Java的日志记录工具,有log4j1跟log4j2两个版本。log4j2是log4j的升级版本。log4j2支持log4j1.2,slf4j、commons loggin和java.util.loggin API。
本文使用log4j2+slf4j进行配置。slf4j不是一个真正的日志实现,而是一个抽象层,相当于一个统一的接口,它允许你在后台使用任意一个日志类库。我们使用slf4j提供的接口进行日志记录的编程,当我们需要更换具体的日志实现时,可以不改日志代码,只要加入相应的jar包跟配置就可以实现切换。例如从logback到log4j2的切换,只需将logback相关jiar包改为log4j2相关jar包即可。

需要引入的jar包

在maven配置文件中加入以下依赖jar包

<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.6.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.6.2</version></dependency><dependency>     <!-- 桥接:告诉Slf4j使用Log4j2 --><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.6.2</version></dependency><dependency><groupId>org.slf4j</groupId> <!-- 桥接:log4j1使用Log4j2 也支持其他实现到log4j的桥接,引入不同的jar包即可--><artifactId>log4j-over-slf4j</artifactId><version>1.7.12</version></dependency><!-- 使用异步写日志功能 必须引入此包--><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>3.3.6</version></dependency>

xml方式log4j配置

可以通过以下四种方式配置log4j2

  • 通过一个格式为xml或json的配置文件
  • 以编程方式,通过创建一个ConfigurationFactory工厂和Configuration实现
  • 以编程方式,通过api暴露在配置界面添加组件的博人方式
  • 以编程方式,通过调用Logger内部类上的方法

配置文件优先级及存放位置

log4j2不在支持log2j1中的.properties后缀的文件配置方式。log4j2版本配置文件后缀只能为xml、json或jsn。
系统选择配置的文件的优先级如下:

  1. classpath下的名为log4j2-test.json或者log4j-test.jsn文件
  2. classpath下名为log4j2-test.xml的文件
  3. classpath下名为log4j2.json或者log4j2.jsn的文件
  4. classpath下名为log4j2.xml的文件

我们一般默认使用log4j2.xml进行命名。如果本地测试,可以先把log4j2-test.xml放到classpath,而正式环境使用log4j2.xml,则在打包部署的时候不要打包log4j2-test.xml

首先先来看一个例子

<?xml version="1.0" encoding="UTF-8"?><!-- status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出 ,默认OFFmonitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。 %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间 %p : 日志输出格式 %c : logger的名称  %m : 日志内容,即 logger.info("message") %n : 换行符 %C : Java类名 %L : 日志输出所在行数 %M : 日志输出所在方法名 hostName : 本地机器名 hostAddress : 本地ip地址 --><Configuration status="debug" strict="true"><properties><property name="LOG_HOME">${sys:catalina.home}/logs/</property></properties><Appenders><!--这个输出控制台的配置 --><Console name="Console" target="SYSTEM_OUT"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/><!-- 输出日志的格式 --><PatternLayout pattern="%d{DEFAULT} %c{1} %p [%t] %m%n"/></Console><!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定是否清空--><File name="log" fileName="${LOG_HOME}/log/test.log" append="false"><!-- 输出的日志格式 --><PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/></File> <!--这个会打印出所有的信息 每个小时自动按年月日时进行压缩 --><RollingFile name="appLog"fileName="${LOG_HOME}info/info.log"filePattern="${LOG_HOME}info/info.log.%d{yyyy-MM-dd-HH}.log.gz"append="true"><!-- 日志打印格式--><PatternLayout pattern="%d{DEFAULT} | %c{1} | %p | [%t] | %m%n"/><Policies><!-- 此处是按时间进行压缩 根据filePattern中的时间格式   每隔一个单位进行压缩--><TimeBasedTriggeringPolicy interval="1" modulate="true"/></Policies></RollingFile><Async name="asyncAppLog"><AppenderRef ref="appLog"/></Async><!-- error日志格式 --><!--配置多个Rollingfile地址,还需要在root下添加appender-ref ref="asyncErrorLog"/> 只显示error级别的信息 --><RollingFile name="errorLog" fileName="${LOG_HOME}error/error.log"filePattern="${LOG_HOME}error/error.log.%d{yyyy-MM-dd}.log.gz"><!-- 日志打印格式--><PatternLayout pattern="%d{DEFAULT} | %c{10} | %p | [%t] | %m%n"/><Policies><!-- 日志压缩触发条件 --><!-- 每次日志超过size配置的大小,按filePattern的配置的格式进行压缩><SizeBasedTriggeringPolicy size="250 MB"/><!-- 此处是按时间进行压缩 根据filePattern中的时间格式 每隔一个单位进行压缩 此处是按天压缩--><TimeBasedTriggeringPolicy interval="1" modulate="true"/></Policies></RollingFile><Async name="asyncErrorLog"><AppenderRef ref="errorLog"/></Async></Appenders><!--定义logger,只有定义了logger并引入的appender,appender才会生效 --><Loggers><!-- 配置日志的根节点,建立一个默认的root的logger,需要在root的level中指定输出的级别  --><Root level="info"><AppenderRef ref="asyncAppLog"/></Root><AsyncLogger name="logger.error" level="info" additivity="false"><AppenderRef ref="asyncErrorLog"/></AsyncLogger></Loggers>
</Configuration>

log4j配置文件详解

logs4j配置

  • Configuration节点中有两个属性:status和monitorInterval。

    • status表示log4j自己的日志打印级别,如果设置为TRACE,可以看到控制台输出log4j本身的日志信息。
    • monitorInterval表示每隔多少秒自动检测配置文件的更改,单位是秒,最小的时间间隔是5秒。
  • Configuration有两个子节点Appenders和Loggers

    • Appenders节点,常见的有三种子节点:Console、RollingFile、File。

      • Console节点用来定义输出到控制台的Appender

        • name:指定Appender的名字
        • target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT
        • PatternLayout : 输出格式,不设置默认为%m%n.
      • File节点用来定义输出到指定位置的文件的Appender
        • name:指定Appender的名字
        • fileName :指定输出日志的目的文件带全路径的文件名
        • PatternLayout : 输出格式,不设置默认为:%m%n.
      • RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender
        • name:指定Appender的名字
        • fileName : 指定输出日志的目的文件带全路径的文件名
        • PatternLayout : RollingFile子节点,输出格式,不设置默认为%m%n.
        • filePattern:指定新建日志文件的名称格式
        • Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志
          • TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1hour。modulate=true用来调整时间。比如现在是早上3点,interval是4没那么第一次滚动是在早上4点,接着是8am,12am..而不是7am
          • SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小。
          • DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max)
    • Loggers节点,常见的有两种:Root和Logger

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

        • level:日志输出级别,共有8个级别,按照从低到高:ALL-Trace-Debug-Info-Warn-Error-Fatal-OFF
        • name:Root的子节点,用来指定该日志输出到哪个Appender
      • Logger节点 用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等
        • level:日志输出级别,共有8个级别,按照从低到高:ALL-Trace-Debug-Info-Warn-Error-Fatal-OFF
        • name: 用来指定该Logger所适用的类或类做在的包路径,继承自Root节点
        • AppenderRef : logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root。如果指定了,那么会在指定的Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity=”false”只在自定义的Appender中进行输出。
    • 关于日志level
      • 共有8个级别,按照从低到高ALL-Trace-Debug-Info-Warn-Error-Fatal-OFF
      • ALL:最低等级,用于打开所有日志记录
      • Trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出
      • Debug:指出细粒度信息事件对调试应用程序是非常有帮助的
      • Info:消息在粗粒度级别上突出强调用用程序的运行过程
      • Warn:输出警告及warn以下级别的日志
      • Error:输出错误信息日志
      • Fatal:输出每个严重的错误事件将会导致应用程序退出的日志
      • OFF:最高等级,用于关闭所有的日志记录
        程序会打印高于或等于所设置级别的日志,设置级别的日志越高,打印出来的日志就越少

PatternLayou格式设置

%d{yyyy-MM-dd HH:mm:ss.SSS}:表示输出的日期格式

%t:表示当前线程名称

%-5level:输出日志级别,-5表示左对齐并且固定输出5个字符

%l:输出语句所在的包名、类名、函数名、行数

%msg:输出日志的内容

%n:换行

%F 输出所在的类文件名

%L 输出行号

%M 输出所在方法名

java 中使用

private final static Logger LOGGER = LoggerFactory.getLogger(clazz);private static final Logger ERROR_LOG = LoggerFactory.getLogger("logger.error");private static final Logger TEST_LOG = LoggerFactory.getLogger("logger.test");
LOGGER.info("info日志");
ERROR_LOG.error("error日志");
TEST_LOG.error("test日志");

spring+maven+log4j2 配置相关推荐

  1. Spring Boot + Log4j2 日志框架配置 (Maven)

    参考Spring Boot官方文档 日志部分 Spring Boot默认情况下,当使用"Starters" 使用Logback输出日志 , 还包括适当的Logback路由, 确保其 ...

  2. 搭建eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo

    前言:我这里搭建好eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo.新手快速上手直接看demo. 最后处提供完整高质量de ...

  3. idea Maven阿里云仓库和阿里spring代理仓库配置

    idea Maven配置 idea Maven阿里云仓库和阿里代理仓库配置 apache-maven下载 apache-maven配置环境变量 更改 idea-maven配置 更改 apache-ma ...

  4. Spring Boot之Log4j2配置(总结)

    Log4j2配置步骤 前言 spring boot支持的日志框架有,logback,Log4j2,Log4j和Java Util  Logging,默认使用的是logback日志框架,一直在使用log ...

  5. Spring tool suit 配置springboot环境或maven环境

    1.前提:已经下载安装好java jdk并配置好了jdk环境.已经下载maven并配置好了环境. 2.STS配置 (1)STS安装下载,官网下载后解压,点击exe文件启动. (2)配置JDK(STS会 ...

  6. Spring Boot log4j2 configuration example

    spring boot 默认log用的是 LogBack. 1. Log4j2 Maven Dependency pom.xml <parent><groupId>org.sp ...

  7. (转)Spring Boot 日志配置(超详细)

    转自:https://blog.csdn.net/inke88/article/details/75007649 ============================== Spring Boot- ...

  8. Spring Boot 日志配置(超详细)

    Spring Boot-日志配置(超详细) 更新日志: 20170810 更新通过 application.yml传递参数到 logback 中. 简书不支持目录,截图一张. 默认日志 Logback ...

  9. 玩转Spring Cloud之配置中心(config server config client)

    玩转Spring Cloud之配置中心(config server &config client)  本文内容导航: 一.搭建配置服务中心(config server) 1.1.git方式 1 ...

最新文章

  1. 比可微架构搜索DARTS快10倍,第四范式提出优化NAS算法
  2. 欠拟合和过拟合学习笔记
  3. 【重读iOS】网络请求2:应用
  4. 一个接口查3张表数据_“离婚冷静期”倒计时,天眼查专业版数据显示我国目前有3万余家婚姻咨询相关企业 北京市最多...
  5. ​AMD放出超强新算法,旧N卡也能焕发第二春
  6. DatabaseMetaData 获取mysql表和字段注释
  7. SQL Server Report Server 报表用户权限T-SQL查询
  8. 先搞定SLAM,再谈如何抓住下一代互联网产业爆发点!
  9. Android 四大组件学习之ContentProvider二
  10. Excel IF+COUNTIF、IFERROR+VLOOKUP使用组合公式
  11. 这名程序猿吐了一管口水,便迎来了人生的四大暴击…
  12. 养老保险个人帐户说明[南京]
  13. pyppeteer 报 Execution context was destroyed, most likely because of a navigation
  14. jeecg-boot 隐藏菜单操作步骤
  15. 华为与android连接方法,华为手机怎样与电脑连接?安卓手机连接电脑的方法介绍...
  16. 网易云信投身远程医疗「超高清时代」,让优质医疗惠及更多人
  17. 可ping通主机而不能连上主机端口的一般原因
  18. 烽火算法针对的是什么,烽火算法对网站优化有什么好处
  19. java石头人_宋玉成
  20. OpenCV 人脸识别方法:特征脸法(应用PCA算法)、费舍尔脸法FisherFace(应用LDA算法)、LBPH方法(应用LBP算法)

热门文章

  1. 字符串算法 金策_OI ACM 课件收集整理
  2. Linux下用hostapd架无线AP(转载)
  3. linux 卸载 resin,Linux 下安装resin
  4. 星际官方小说《刀锋女王》——第4章(续2)
  5. Java Essentials: Preventing ConcurrentModificationException
  6. WPF(6)WPF之TextBox控件
  7. 三大财富陷阱揭示:迈向富裕人生的关键先知
  8. babylonjs_使用BabylonJS构建强大的3D浏览器游戏
  9. linux中recvfrom读取速度,Linux中的select、sendto、recvfrom的系统开销
  10. Java SSM中POJO、Controller、ServiceDao、Dao层的作用于区别