Log4j使用配置记录

之前一直是做Android的,现在想稍微学点服务器的东西,幸好Android也是用Java写的,上手问题不是很大,Java最大的优势就是开源,有令人眼花缭乱的开源项目,各种成熟好用的包。

Log4j是Apache的一个开源项目,我们可以用它来控制日志信息在控制台、文件等的输出,输出格式可由开发者自己定义,而要实现这些只需要一个配置文件就能实现。

简单使用

1、下载Jar包

Apache下载最新Jar包

2、导入Jar包

下载下来的压缩文件里有很多Jar包,我们选择log4j-api-x.x.x.jar和log4j-core-x.x.x.jar,其他根据自己需求使用

3、配置log4j2.xml

4、使用

public class Test {
	private static final Logger log = LogManager.getLogger(Test.class);
	public static void main(String[] args) {
		log.trace("log trace");
		log.debug("log debug");
		log.info("log info");
		log.warn("log warn");
		log.error("log error");
		log.fatal("log fatal");
	}
}

配置文件

最简单配置,仅仅是在控制台能打印日志

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
	<appenders>
		<Console name="Console" target="SYSTEM_OUT">
			<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%class.%M] %msg%n" />
		</Console>
	</appenders>
	<loggers>
		<root level="info">
			<appender-ref ref="Console" />
		</root>
	</loggers>
</Configuration>

1、根节点Configuration

属性:
status:用来指定log4j本身的打印日志的级别;
monitorInterval:指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s;
子节点(可定义多个):
Appenders和Loggers
2、Appenders节点
子节点:
1.Console节点控制在控制台输出的Appender
属性:
name:Appender的名称;
target:包括SYSTEM_OUT和SYSTEM_ERR,一般默认只设置SYSTEMOUT;
PatternLayout:输出格式,不设置默认为:%m%n;
2.File节点控制文件输出的Appender
属性:
name:Appender的名称;
fileName:输出日志的路径;
PatternLayout:输出格式,不设置默认为:%m%n;
3.RollingFile节点控制超过指定大小自动删除旧的创建新的Appender
属性:
name:Appender的名称;
fileName:输出日志的路径;
PatternLayout:输出格式,不设置默认为:%m%n;
filePattern:新日志文件名称格式;
DefaultRolloverStrategy:通过max属性控制同意文件夹下最多有存在多少个之后删除最旧的创建新的;
Policies:滚动日志的策略,控制什么情况下新建日志文件;
子节点:
TimeBasedTriggeringPolicy:Policies的子节点,通过属性interval控制多久滚动一次,默认是1小时,属性modulate=true用来调整时间;
SizeBasedTriggeringPolicy:Policies的子节点,通过属性size控制当文件大小超过size之后滚动;
3、Loggers节点
子节点:
Root:指定项目根日志,若没有单独设置Logger,默认使用该Root日至输出
属性:
level:日志输出级别,从低到高All < Trace < Debug < Info < Warn < Error < Fatal < OFF;
子节点:
AppenderRef:Root的子节点,控制日志输出到哪个Appender;
Logger:单独控制指定日志的形式
属性:
level:日志输出级别,从低到高All < Trace < Debug < Info < Warn < Error < Fatal < OFF;
name:控制Logger适用的类或类所在包全路径,继承自Root节点;
子节点:
AppenderRef:Logger的子节点,控制日志输出到哪个Appender,默认继承Root。如果指定会在Appender和Root的Appender中都输出,可通过属性additivity=false控制只在Appender输出

注:

常用输出日志格式: 

%d{HH:mm:ss.SSS}:时间, 

%level:日志等级, 

%class:类名, 

%msg:日志文本, 

%n:换行, 

%l:输出语句所在包名.类名.方法名.行号 

%M:方法名

较完整log4j2.xml配置模版

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
status:用来指定log4j本身的打印日志的级别, 
monitorInterval:用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s.-->
<Configuration status="WARN" monitorInterval="300">
	<!-- 定义常量便于后面使用 -->
	<properties>
		<property name="LOG_HOME">D:/logs</property>
	</properties>
	<appenders>
		<!-- 输出控制台的配置 -->
		<Console name="Console" target="SYSTEM_OUT">
			<!-- 只输出level等级以上信息(日志级别从低到高 All < Trace < Debug < Info < Warn < Error < Fatal < OFF) -->
			<ThresholdFilter level="ERROR" onMatch="ACCEPT"
				onMismatch="DENY" />
			<!-- 输出日志格式 常用: %d{HH:mm:ss.SSS}:时间, %level:日志等级, %class:类名, %msg:日志文本, 
				%n:换行, %l:输出语句所在包名.类名.方法名.行号 %M:方法名, -->
			<PatternLayout
				pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%class.%M] %msg%n" />
		</Console>
		<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用 -->
		<File name="LogTmp" fileName="${LOG_HOME}/tmp.log" append="false">
			<PatternLayout
				pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%class.%M] %msg%n" />
		</File>
		<!-- 官方宣称RollingRandomAccessFile比RollingFileAppender性能提升20-200% -->
		<!-- 所有日志信息每次大小超过size,则这size大小的日志会自动备份到filePattern下,最多备份max个 -->
		<RollingRandomAccessFile name="RollingFileInfo" fileName="${LOG_HOME}/info.log"
			filePattern="${LOG_HOME}/%d{yyyy}/%d{MMdd}-info-%i.log">
			<ThresholdFilter level="INFO" />
			<PatternLayout
				pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%class.%M] %msg%n" />
			<Policies>
				<TimeBasedTriggeringPolicy interval="1" />
				<SizeBasedTriggeringPolicy size="30MB" />
			</Policies>
			<!-- 同一文件夹下最多max个文件,不设置默认为7 -->
			<DefaultRolloverStrategy max="20"/>
		</RollingRandomAccessFile>
		<!-- level以上信息每次大小超过size,则这size大小的日志会自动备份到filePattern下,最多备份max个 -->
		<RollingRandomAccessFile name="RollingFileError" fileName="${LOG_HOME}/error.log"
			filePattern="${LOG_HOME}/%d{yyyy}/%d{MMdd}-error-%i.log">
			<ThresholdFilter level="ERROR" />
			<PatternLayout
				pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%class.%M] %msg%n" />
			<Policies>
				<TimeBasedTriggeringPolicy interval="1" />
				<SizeBasedTriggeringPolicy size="30MB" />
			</Policies>
			<!-- 同一文件夹下最多max个文件,不设置默认为7 -->
			<DefaultRolloverStrategy max="20"/>
		</RollingRandomAccessFile>
	</appenders>
	<!--只有定义了logger并引入的appender,appender才会生效 -->
	<loggers>
		<!--过滤掉一些无用的信息-->
        <logger name="org.springframework" level="INFO"></logger>
		<root level="info">
			<appender-ref ref="Console" />
			<appender-ref ref="LogTmp" />
			<appender-ref ref="RollingFileInfo" />
			<appender-ref ref="RollingFileError" />
		</root>
	</loggers>
</Configuration>

猜你喜欢

转载自blog.csdn.net/q1113225201/article/details/76562147