使用log4j2的經常使用要點

##日誌配置html

log4j2是使用log4j2.xml配置文件,區別於log4j,配置項也有一些變化。 如下是一個最經常使用的控制檯輸出日誌的配置:apache

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
	<Console name="Console" target="SYSTEM_OUT">
		<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
	</Console>
	
</Appenders>
<Loggers>
	<Root level="info">
		<AppenderRef ref="Console"/>
	</Root>
</Loggers>
</Configuration>

##兼容其餘日誌組件api

通常經常使用的日誌組件log4j(1.2.x),common-log(jcl),self4j,所有橋接,看着都累,可是很實用,把全部日誌API都適配過來,全用log4j2處理。tomcat

依賴配置(詳見 log4j2 maven-artifacts)以下:app

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.7</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.7</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.7</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>2.7</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.7</version>
</dependency>

##配置變量 支持不少上下文環境中的變量,詳見 Log4j2 Lookupsmaven

好比:日誌

  • 環境變量是${xxx},或者是${env:xxx}
  • 系統參數(System Properties)是${sys:xxx}

能夠在具體運用時經過環境變量或系統變量去控制日誌輸出的路徑。 好比,輸出到tomcat/logs下能夠這樣:code

${sys:catalina.base}/logs/xxx.log

由於tomcat啓動腳本中加入了 -Dcatalina.base=...系統參數。xml

##日誌輸出模板htm

參見 Log4j2 PatternLayout

通常使用:

<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>

比較有意思的是%c{1.}這個會輸出一個縮寫的日誌記錄器名稱:

org.apache.commons.Foo -> o.a.c.Foo

會節約很多空間。

##循環文件日誌

這個在實際中常常用到,參見 RollingFileAppender

好比:

<RollingFile name="RollingFile"
	fileName="${sys:catalina.base}/logs/xxx.log"
	filePattern="${sys:catalina.base}/logs/xxx.%d{yyyy-MM-dd}-%i.log.gz">
	 <PatternLayout>
	     <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
	 </PatternLayout>
	 <Policies>
	     <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
	     <SizeBasedTriggeringPolicy size="200 MB"/>
	 </Policies>
</RollingFile>

這會天天切出帶日期後綴的日誌文件,且會根據體積200MB左右一個文件,最讚的是還用gz壓縮了(注意使用.gz的後綴會自動壓縮,如果.log則是原始文本)

相關文章
相關標籤/搜索