版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/smallbabylong/article/details/83475308
- 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的装配过程 -->
<configuration status="off">
<!-- 文件路径 -->
<properties>
<!--设置日志在硬盘上输出的目录${log4j:configParentLocation}使用此查找将日志文件放在相对于log4j配置文件的目录中-->
<property name="Log_Home">${web:rootDir}/logs</property>
</properties>
<!--先定义所有的appender-->
<appenders>
<!--输出控制台的配置-->
<Console name="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}"-->
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36}.%M @%L :-> %msg%xEx%n"/>
</Console>
<!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="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">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36}.%M @%L :-> %msg%xEx%n"/>
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<filters>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</filters>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
</RollingFile>
<!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
<RollingFile name="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">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36}.%M @%L :-> %msg%xEx%n"/>
<filters>
<ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
</filters>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
</RollingFile>
<!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
<RollingFile name="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">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36}.%M @%L :-> %msg%xEx%n"/>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
<SizeBasedTriggeringPolicy size="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>
<logger name="org.springframework.core" level="info">
</logger>
<logger name="org.springframework.beans" level="info">
</logger>
<logger name="org.springframework.context" level="info">
</logger>
<logger name="org.springframework.web" level="info">
</logger>
<!--建立一个默认的root的logger-->
<root level="info">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileDebug"/>
<appender-ref ref="RollingFileError"/>
</root>
</loggers>
</configuration>
3.配置文件中的一些说明
- 配置中
<!-- status=debug 可以查看log4j的装配过程 --> <configuration status="off">
将status改为status=debug ,可以看到装配过程非常详细,可以看到装配文件路径以及写文件路径,如果不知道配置的文件存到了哪里都可以在这里看到,如下
- 没有写文件的话将status改为debug模式,查看路径,文件路径不对是不能写文件的。我的XML内一些变量有何用也做了比较详细的说明,如果还有不懂可以留言交流。
- 日志生成位置在发布的文件下下,以上配置我的log日志所在位置为如下:
另附官方web日志配置说明