【Lo4j2】log4j2基础知识

简单介绍lo4j2

Lo4j2可以在项目中代替System.out,输出信息,更为强大,可以定义不同的信息级别。
gradle项目中增加如下类库:

compile group: 'org.apache.logging.log4j', name: 'log4j-web', version: '2.11.1'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-log4j2', version: '2.2.4.RELEASE'

日志级别

trace<debug<info<warn<error<off
说明:
级别之间是包含的关系,意思是如果你设置日志级别是trace,则大于等于这个级别的日志都会输出。

  • trace: 是追踪,就是程序推进一点,你就可以写个trace输出,所以trace应该会特别多
  • debug: 调试,一般就只用这个作为最低级别,trace压根不用。是在没办法就用eclipse或者idea的debug功能就好了么。
  • info: 输出一下你感兴趣的或者重要的信息,这个用的最多了。
  • warn: 不算错误但是也请注意
  • error: 错误信息。用的也比较多。
  • off:都不输出,关闭日志。

配置文件,log4j2.xml

log4j2.xml中分为三个部分。
Properties定义变量,Appenders定义输出位置。Loggers定义输出哪个类什么级别的信息到哪个位置。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
	<!-- 变量 -->
	<Properties>	
	</Properties>
	<!-- 日志输出位置 -->
	<Appenders>		
	</Appenders>
	<!-- 记录器,哪个包的什么信息级别输出到哪个位置 -->
	<Loggers>	
        </Loggers>
</Configuration>

configuration 有一个** status 属性,这个属性表示 log4j2 本身的日志信息打印级别**。如果把status改为TRACE再执行测试代码,可以看到控制台中打印了一些log4j加载插件、组装logger等调试信息。

先在Properties中定义变量。先举例子。

	<property name="log.home" value="${sys:catalina.home}/logs/" />
	<property name="prj.name" value="koma_zhe" />

然后在Appenders复制一下网上找到的输出到控制台这个,到这里就可以

<Console name="Console" target="SYSTEM_OUT">
	<PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
</Console>

解释:
其中 PatternLayout %d{HH:mm:ss.SSS} 表示输出到毫秒的时间,%t 输出当前线程名称。
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0。
%logger 输出logger名称,因为Root Logger没有名称,所以没有输出。
%msg 日志文本,%n 换行。
其他常用的占位符有:
%F 输出所在的类文件名,如Client.java
%L 输出行号
%M 输出所在方法名
%l 输出语句所在的行数, 包括类名、方法名、文件名、行数

默认的记录器

需要定义一个默认的记录器,没有定义自己的时候使用默认的。 所有包的debug信息输出到控制台:

 <Root level="debug">
	<AppenderRef ref="Console" />
   </Root>

使用lo4j2 :

//部分代码
import org.slf4j.*;
private final static Logger logger=LoggerFactory.getLogger(HelloWorld.class);
logger.debug("loc is {}",loc.getDisplayName(loc));

注意其中logger中的{}是占位符。同时注意loger 可以输出,更改为info,不再显示。可以自定义一个记录器 <logger name="demo" level="debug"/> 这时候可以输出。

更多设置

增加File输出位置:例如

<File name="File" fileName="${prj.name}.log">
	<PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
</File>

发现pattern用多次,这里用的同一个,可以声明为变量

<property name="pattern">
	%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n
</property>

使用定义的变量:

<File name="File" fileName="${prj.name}.log">
	<PatternLayout pattern="${pattern}" />
</File>
<logger name="demo" level="debug">
	<AppenderRef ref="log" />
 </logger>

root中也可以输出到这个位置:

<Root level="info">
	<AppenderRef ref="Console" />
	<AppenderRef ref="log"/>
</Root>

一个示例log4j2.xml文件

resources目录下

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="warn">
	<properties>
	<!-- ${web:rootDir} ${sys:catalina.home}-->
		<property name="log.home" value="${sys:catalina.home}" />
		<property name="prj.name">koma_zhe</property>
		<property name="pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level-%l{36}-%msg%n</property>
	</properties>
	<Appenders>
		<Console name="console" target="SYSTEM_OUT">
			<PatternLayout pattern="${pattern}" />
		</Console>
		<File name="file" fileName="${log.home}/${prj.name}.log" append="true">
			<PatternLayout pattern="${pattern}" />
		</File>
		<File name="error" fileName="${log.home}/${prj.name}-error.log">
			<ThresholdFilter level="error" onMatch="ACCEPT"
				onMismatch="DENY" />
			<PatternLayout pattern="${pattern}" />
		</File>
		<RollingFile name="rollingFile" fileName="${log.home}/${prj.name}.txt"
			filePattern="${log.home}/${prj.name}-%d{yyyyMMdd}-%i.txt">
			<PatternLayout pattern="${pattern}" />
			<Policies>
				<OnStartupTriggeringPolicy />
				<SizeBasedTriggeringPolicy size="20KB" />
			</Policies>
			<DefaultRolloverStrategy max="20" />
		</RollingFile>
	</Appenders>
	<Loggers>
		<logger name="controller" level="debug" additivity="true">
			<appender-ref ref="console" />
			<appenderRef ref="file" />
			<appenderRef ref="error" />
		</logger>
		<logger name="demo" level="trace" />
		<logger name="com.opensymphony.xwork2" level="debug" />
		<Root level="info">
			<appenderRef ref="rollingFile" />
			<appenderRef ref="console" />
			<appenderRef ref="file" />
			<appenderRef ref="error" />
		</Root>
	</Loggers>
</configuration>

以下filePattern中.gz,不要也可以,指定创建目录。然后在目录下生成日志文件,不用.gz结尾也可以。其中fileName不能相同,都必须是唯一的。

<RollingFile name="RollingFileError" fileName="${log.home}/${app.name}.txt"
filePattern="${log.home}/$${date:yyyy-MM}/app-%d{yyyyMMdd}-%i.txt.gz">    	
	<PatternLayout pattern="%d - %c [%t] %-5p %c %x %l - %m%n" />
	<Policies>
		 <OnStartupTriggeringPolicy />
		<SizeBasedTriggeringPolicy size="200KB" />
	</Policies>
	<DefaultRolloverStrategy max="20" />
</RollingFile>

日志文件的位置

可以给出一个绝对位置,比如'd:\logs'。或相对路径,比如当前路径的'.',tomcat路径的'${sys:catalina.home}'

<File name="file" fileName="${web:rootDir}/jee2017.log" append="true">
${sys:catalina.home}/logs/jee2017.log

使用lombok中的@Slf4j注释

在类前边使用@Slf4j注释,会自动增加一个Logger log的静态变量,使用方法同以上。变量名可以自己配置,在java目录下增加lombok.config文件,内容如下:lombok.log.fieldname=logger

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Koma_zhe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值