//status用来指定log4j本身的打印日志的级别.
<Configuration status="info">
//配置输出文件
<properties>
<property name="LOG_HOME">logs/</property>
<property name="FILE_NAME">baseLog</property>
</properties>
//Appenders节点
<Appenders>
<!-- 控制台输出配置 -->
//Console节点用来定义输出到控制台的Appender.
<Console name="Console" target="SYSTEM_OUT">
//日志输出格式配置,t:当前线程,F:输出日志信息所属的类的类名
//L:出日志信息的语句处于它所在的类的第几行
//m:输出代码中指定的信息,如log(message)中的message
//n:输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
//d:输出日志时间点的日期或时间
<PatternLayout pattern="%logger{36} %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%F:%L] - %msg%n" />
</Console>
<Console name="JettyInfo" target="SYSTEM_OUT">
<PatternLayout pattern="%logger{36} %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%F:%L] - %msg%n" />
</Console>
//RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender.
<RollingRandomAccessFile name="BaseLogFile" fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="%logger{36} %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%F:%L] - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1" />
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
<!-- 指定最多保存的文件个数 -->
<DefaultRolloverStrategy max="20" />
</RollingRandomAccessFile>
<!-- 异步写日志 -->
<Async name="Async">
<AppenderRef ref="BaseLogFile" />
</Async>
</Appenders>
//Loggers节点
<Loggers>
//Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等
<Logger name="baseLog" level="info" additivity="true">
<AppenderRef ref="BaseLogFile" />
</Logger>
<Logger name="org.eclipse.jetty" level="info" additivity="false">
<AppenderRef ref="JettyInfo" />
</Logger>
//Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
<Root level="error">
//AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
其他博主的详细解析:参考