1、日志级别,输出日志级别大于日志文件设置的级别才能输出。
OFF > Fatal > Error > Warn > Info > Debug > Trace > All
2、Appenders中子节点Console、File、RollingFile、RollingRandomAccessFile区别?
- Console:用于输出在控制台
- File:输出日志文件,不可设置,无限增长
- RollingFile:输出日志文件,超过指定大小会将文件保存至文件夹中,再删除,然后新建文件
- RollingRandomAccessFile:输出日志文件,超过指定大小会将文件保存至文件夹中,再删除,然后新建文件
3、log4j2.xml及常用属性
<?xml version="1.0" encoding="UTF-8"?>
<!--
根节点Configuration常用的有两个属性:status和monitorinterval,
有三个子节点:Appenders、Logger、properties。
status:用来指定log4j2本身的打印日志的级别。
monitorinterval:用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s。
-->
<Configuration status="Debug" monitorInterval="1800">
<properties>
<!--常用属性的设置-->
<!--设置日志文件存放的路径属性-->
<property name="LOG_HOME">D:/logs/</property>
<property name="FILE_NAME">main</property>
</properties>
<Appenders>
<!--控制台输出-->
<!--name:用于Logger节点中root的引用-->
<!--target:默认是SYSTEM_OUT,SYSTEM_ERR字体为红色-->
<Console name="Console" target="SYSTEM_OUT">
<!--输出格式,不设置默认为:%m%n.-->
<PatternLayout>
<Pattern>
%X{appname}[%X{hostname}] %X{appname}[%X{hostname}] %d{yyyy-MM-dd HH:mm:ss} [%t] %-5p [%c] : %m%n
</Pattern>
</PatternLayout>
</Console>
<!--临时日志-->
<File name="Log" fileName="${LOG_HOME}/${FILE_NAME}-%d{yyyy-MM-dd}.log">
<PatternLayout>
<Pattern>
%X{appname}[%X{hostname}] %X{appname}[%X{hostname}] %d{yyyy-MM-dd HH:mm:ss} [%t] %-5p [%c] : %m%n
</Pattern>
</PatternLayout>
</File>
<!--自动存入按年份-月份建立的文件夹 trace级别
filePattern:指定新建日志文件的名称格式.
-->
<RollingRandomAccessFile name="TraceLog" fileName="${LOG_HOME}/${FILE_NAME}_trace.log"
filePattern="${LOG_HOME}/${FILE_NAME}_trace/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.log"
immediateFlush="true">
<PatternLayout>
<Pattern>
%X{appname}[%X{hostname}] %X{appname}[%X{hostname}] %d{yyyy-MM-dd HH:mm:ss} [%t] %-5p [%c] : %m%n
</Pattern>
</PatternLayout>
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<!--基于时间的滚动策略,interval属性用来指定多久滚动一次。-->
<TimeBasedTriggeringPolicy/>
<!--基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小。
超过则会创建一个文件夹保存原文件至指定目录。-->
<SizeBasedTriggeringPolicy size="20KB"/>
</Policies>
<!--创建的文件夹下面有几个文件-->
<DefaultRolloverStrategy max="100"/>
</RollingRandomAccessFile>
<!--自动存入按年份-月份建立的文件夹 debug级别-->
<RollingRandomAccessFile name="DebugLog"
fileName="${LOG_HOME}/${FILE_NAME}_debug.log"
filePattern="${LOG_HOME}/${FILE_NAME}_debug/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.log"
immediateFlush="true">
<PatternLayout>
<Pattern>
%X{appname}[%X{hostname}] %X{appname}[%X{hostname}] %d{yyyy-MM-dd HH:mm:ss} [%t] %-5p [%c] : %m%n
</Pattern>
</PatternLayout>
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<!--基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小。-->
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
<DefaultRolloverStrategy max="100"/>
</RollingRandomAccessFile>
<!--自动存入按年份-月份建立的文件夹 info级别-->
<RollingRandomAccessFile name="InfoLog" fileName="${LOG_HOME}/${FILE_NAME}_info.log"
filePattern="${LOG_HOME}/${FILE_NAME}_info/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.log"
immediateFlush="true">
<PatternLayout>
<Pattern>
%X{appname}[%X{hostname}] %X{appname}[%X{hostname}] %d{yyyy-MM-dd HH:mm:ss} [%t] %-5p [%c] : %m%n
</Pattern>
</PatternLayout>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
<DefaultRolloverStrategy max="100"/>
</RollingRandomAccessFile>
<!--自动存入按年份-月份建立的文件夹 warn级别-->
<RollingRandomAccessFile name="WarnLog" fileName="${LOG_HOME}/${FILE_NAME}_warn.log"
filePattern="${LOG_HOME}/${FILE_NAME}_warn/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.log"
immediateFlush="true">
<PatternLayout>
<Pattern>
%X{appname}[%X{hostname}] %X{appname}[%X{hostname}] %d{yyyy-MM-dd HH:mm:ss} [%t] %-5p [%c] : %m%n
</Pattern>
</PatternLayout>
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
<DefaultRolloverStrategy max="100"/>
</RollingRandomAccessFile>
<!--自动存入按年份-月份建立的文件夹 error级别-->
<RollingRandomAccessFile name="ErrorLog" fileName="${LOG_HOME}/${FILE_NAME}_error.log"
filePattern="${LOG_HOME}/${FILE_NAME}_error/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.log"
immediateFlush="true">
<PatternLayout>
<Pattern>
%X{appname}[%X{hostname}] %X{appname}[%X{hostname}] %d{yyyy-MM-dd HH:mm:ss} [%t] %-5p [%c] : %m%n
</Pattern>
</PatternLayout>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
<DefaultRolloverStrategy max="100"/>
</RollingRandomAccessFile>
<!--自动存入按年份-月份建立的文件夹 fatal级别-->
<RollingRandomAccessFile name="FatalLog" fileName="${LOG_HOME}/${FILE_NAME}_fatal.log"
filePattern="${LOG_HOME}/${FILE_NAME}_fatal/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.log"
immediateFlush="true">
<PatternLayout>
<Pattern>
%X{appname}[%X{hostname}] %X{appname}[%X{hostname}] %d{yyyy-MM-dd HH:mm:ss} [%t] %-5p [%c] : %m%n
</Pattern>
</PatternLayout>
<ThresholdFilter level="fatal" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
<DefaultRolloverStrategy max="100"/>
</RollingRandomAccessFile>
<!--RollingFile与RollingRandomAccessFile无区别。-->
<RollingFile name="debug_rollingfile" fileName="${LOG_HOME}/${FILE_NAME}_debug_rollingfile.log"
filePattern="${LOG_HOME}/${FILE_NAME}/%d{yyyy-MM-dd}-debug_rollingfile.log">
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<Pattern>
%X{appname}[%X{hostname}] %X{appname}[%X{hostname}] %d{yyyy-MM-dd HH:mm:ss} [%t] %-5p [%c] : %m%n
</Pattern>
</PatternLayout>
<!-- 文件截断的条件,具体参考文档 -->
<Policies>
<TimeBasedTriggeringPolicy interval="24"/>
<SizeBasedTriggeringPolicy size="20MB"/>
</Policies>
</RollingFile>
</Appenders>
</Appenders>
<Loggers>
<!--单独指定日志的格式,避免不必要的日志打印出来-->
<logger name="org.springframework.core" level="INFO"/>
<logger name="org.springframework.beans" level="INFO"/>
<logger name="org.springframework.context" level="INFO"/>
<logger name="org.springframework.web" level="INFO"/>
<!--本项目中的日志级别,默认不需要设置
level:日志的输出级别。
additivity="false":只在自定义的Appender中进行输出。
-->
<logger name="com.wangyk.mybatis.main" level="all" includeLocation="true" additivity="false">
<!--Root的子节点,用来指定该日志输出到哪个Appender。-->
<!--与logger节点中的error比较,大于logger中的level则会输出。-->
<appender-ref ref="Console"/>
<appender-ref ref="TraceLog"/>
<appender-ref ref="DebugLog"/>
<appender-ref ref="InfoLog"/>
<appender-ref ref="WarnLog"/>
<appender-ref ref="ErrorLog"/>
<appender-ref ref="FatalLog"/>
</logger>
<!--Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出。
level:日志的输出级别
-->
<root level="all" includeLocation="true">
<!--Appender-Ref:Root的子节点,用来指定该日志输出到哪个Appender。-->
<appender-ref ref="Console"/>
<appender-ref ref="TraceLog"/>
<appender-ref ref="DebugLog"/>
<appender-ref ref="InfoLog"/>
<appender-ref ref="WarnLog"/>
<appender-ref ref="ErrorLog"/>
<appender-ref ref="FatalLog"/>
<appender-ref ref="debug_rollingfile"/>
<appender-ref ref="Log"/>
</root>
</Loggers>
</Configuration>
4.pom文件中的jar包
<!--核心log4j2jar包-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<!--web工程-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.8.2</version>
</dependency>