springmvc使用log4j2的配置,以及解决controller日志只有控制台打印日志,不生成本项目文件夹下

2022-07-08 08:19:47
  • springmvc使用log4j2的配置,以及只有控制台打印日志,不生成文件的解决方式,mvc使用log4j2时会出现在controller里的日志只会出现在控制台,但不会生成文件的情况。笔者切身经历了一番磨难终于解决,特此留下此篇说明以留给有需要的朋友。

1.引包

笔者用的是gradle作为包管理,maven请自行搜索包依赖依赖包搜索网站

  • 目前最新依赖包
    //log4j  https://github.com/apache/logging-log4j2
    compile 'org.apache.logging.log4j:log4j-api:2.11.1'
    compile 'org.apache.logging.log4j:log4j-core:2.11.1'
    compile 'org.apache.logging.log4j:log4j-web:2.11.1'

2. log4j2.xml的配置

官方配置说明

  • xml文件,位置只要在resource目录下即可,可以自定义文件名或者路径,官方默认要求是必须在resource根目录下,以log4j2开头的文件名,我这里是在resource目录下的log4j2文件夹下。
    如图:
    - 位置
  • 因为位置不在默认地方,所以需要在web.xml里指定配置目录添加如下代码:
<!--log4j2--><context-param><param-name>log4jConfiguration</param-name><param-value>classpath:log4j2/log4j2.xml</param-value></context-param><context-param><param-name>log4jRefreshInterval</param-name><param-value>60000</param-value></context-param><listener><listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class></listener>
  • log4j2.xml文件
<?xml version="1.0" encoding="UTF-8"?><!-- status=debug 可以查看log4j的装配过程 --><configurationstatus="off"><!-- 文件路径 --><properties><!--设置日志在硬盘上输出的目录${log4j:configParentLocation}使用此查找将日志文件放在相对于log4j配置文件的目录中--><propertyname="Log_Home">${web:rootDir}/logs</property></properties><!--先定义所有的appender--><appenders><!--输出控制台的配置--><Consolename="Console"target="SYSTEM_OUT"><!--输出日志的格式
            %L::输出代码中的行号。
            %M:输出产生日志信息的方法名。--><!--"%highlight{%d{HH:mm:ss.SSS} %-5level %logger{36}.%M() @%L - %msg%n}{FATAL=Bright Red, ERROR=Bright Magenta, WARN=Bright Yellow, INFO=Bright Green, DEBUG=Bright Cyan, TRACE=Bright White}"--><PatternLayoutpattern="%d{HH:mm:ss.SSS} %-5level %class{36}.%M @%L :-> %msg%xEx%n"/></Console><!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFilename="RollingFileInfo"fileName="${Log_Home}/info.${date:yyyy-MM-dd}.log"immediateFlush="true"filePattern="${Log_Home}/$${date:yyyy-MM}/info-%d{MM-dd-yyyy}-%i.log.gz"><PatternLayoutpattern="%d{yyyy-MM-dd'at' HH:mm:ss z} %-5level %class{36}.%M @%L :-> %msg%xEx%n"/><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><filters><ThresholdFilterlevel="error"onMatch="DENY"onMismatch="NEUTRAL"/><ThresholdFilterlevel="info"onMatch="ACCEPT"onMismatch="DENY"/></filters><Policies><TimeBasedTriggeringPolicymodulate="true"interval="1"/><SizeBasedTriggeringPolicysize="10MB"/></Policies></RollingFile><!--   这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 --><RollingFilename="RollingFileDebug"fileName="${Log_Home}/debug.${date:yyyy-MM-dd}.log"immediateFlush="true"filePattern="${Log_Home}/$${date:yyyy-MM}/debug-%d{MM-dd-yyyy}-%i.log.gz"><PatternLayoutpattern="%d{yyyy-MM-dd'at' HH:mm:ss z} %-5level %class{36}.%M @%L :-> %msg%xEx%n"/><filters><ThresholdFilterlevel="info"onMatch="DENY"onMismatch="NEUTRAL"/><ThresholdFilterlevel="debug"onMatch="ACCEPT"onMismatch="NEUTRAL"/></filters><Policies><TimeBasedTriggeringPolicymodulate="true"interval="1"/><SizeBasedTriggeringPolicysize="10MB"/></Policies></RollingFile><!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 --><RollingFilename="RollingFileError"fileName="${Log_Home}/error.${date:yyyy-MM-dd}.log"immediateFlush="true"filePattern="${Log_Home}/$${date:yyyy-MM}/error-%d{MM-dd-yyyy}-%i.log.gz"><PatternLayoutpattern="%d{yyyy-MM-dd'at' HH:mm:ss z} %-5level %class{36}.%M @%L :-> %msg%xEx%n"/><ThresholdFilterlevel="error"onMatch="ACCEPT"onMismatch="DENY"/><Policies><TimeBasedTriggeringPolicymodulate="true"interval="1"/><SizeBasedTriggeringPolicysize="10MB"/></Policies></RollingFile></appenders><!--trace<debug<info<warn<error<fatal--><!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--><!--过滤掉spring和mybatis的一些无用的DEBUG信息--><!--log4j的additivity属性: additivity它是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。
    具体说,默认情况下子Logger会继承父Logger的appender,也就是说子Logger会在父Logger的appender里输出。
    若是additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输出。!--><!--<logger name="org" level="INFO" additivity="false" ></logger>--><!--<logger name="org.springframework" level="INFO" additivity="false"></logger>--><!--<logger name="org.mybatis" level="INFO" additivity="false"></logger>--><loggers><loggername="org.springframework.core"level="info"></logger><loggername="org.springframework.beans"level="info"></logger><loggername="org.springframework.context"level="info"></logger><loggername="org.springframework.web"level="info"></logger><!--建立一个默认的root的logger--><rootlevel="info"><appender-refref="Console"/><appender-refref="RollingFileInfo"/><appender-refref="RollingFileDebug"/><appender-refref="RollingFileError"/></root></loggers></configuration>

3.配置文件中的一些说明

  • 配置中<!-- status=debug 可以查看log4j的装配过程 --> <configuration status="off">将status改为status=debug ,可以看到装配过程非常详细,可以看到装配文件路径以及写文件路径,如果不知道配置的文件存到了哪里都可以在这里看到,如下
    在这里插入图片描述
  • 没有写文件的话将status改为debug模式,查看路径,文件路径不对是不能写文件的。我的XML内一些变量有何用也做了比较详细的说明,如果还有不懂可以留言交流。
  • 日志生成位置在发布的文件下下,以上配置我的log日志所在位置为如下:
    在这里插入图片描述
    另附官方web日志配置说明
  • 作者:林深人不知
  • 原文链接:https://blog.csdn.net/smallbabylong/article/details/83475308
    更新时间:2022-07-08 08:19:47