日志管理库log4j和log4j2的安装配置指南

lab4中要求为经过异常处理、错误处理的程序增加日志功能,我选择使用第三方java日志库log4j2,在安装使用中遇到一些问题,借此在这里分享。

log4j2的安装

系统:Windows 10
工具:Eclipse
首先搜索log4j2,进入其官方网站的下载界面,我使用Windows10系统,选择第二个binary压缩包的下载链接进行镜像下载即可。
其中binary是编译好的可以直接使用,source是还没编译过的源代码,需要自行编译,在这里选择binary版本即可。
在这里插入图片描述
下载好压缩包后进行解压,按照官网上的说明,至少要导入

  • log4j-api-2.13.3.jar
  • log4j-core-2.13.3.jar

在这里插入图片描述
然后将日志库导入到项目中,右键→Build Path→Configure Build Path,然后选择Add JARs或Add External JARs,取决于JAR包放在哪里,不再赘言。
在这里插入图片描述

log4j2的配置

新建XML文件

log4j2安装后需要配置,即日志的记录方式、格式,以及输出到文件等工作。在这里我遇到了一个问题,实验指导书上给的第三方java日志库是log4j,即log4j的第一代版本,但其网站上提供的下载是第二代版本即我选用的log4j2。这两者的配置方式不同,log4j通过log4j.properties进行配置,但log4j2通过log4j2.xml进行配置,如果搜索log4j的话会导致下载的版本和网上提供的教程有冲突,这点需要注意。
log4j2会在编译时搜索在同一文件夹下的log4j2.xml,进行自动配置,log4j则是搜索log4j.properties。
首先在源文件夹下右键→New→Other…以新建一个空的xml文件
在这里插入图片描述
在这里插入图片描述
新建好文件重命名后,会看到一个空白的表格,这时需要调整到Source视图进行编辑。
在这里插入图片描述

XML文件示例

接下来,我给出对于我的log4j2进行的配置文件内容,并会在下一节进行具体的解析。
不过首先要了解以下两点:

  • log4j2的日志包含几种级别,其优先级为:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL,用于对于日志的分类,例如一些无法处理的异常,可以用error级别记录,一些可以进行处理的异常可以将异常信息及处理信息用debug级别记录,输出到文件时可以选择输出的最低级别,这就是优先级的作用之一;
  • log4j2自身也有优先级,Configuration后面的status就是用于设置log4j2自身内部的信息输出,如果调整优先级至debug或trace,输出到控制台上的内容就会不止你源代码中想要记录的日志,还包括log4j2自身的日志;
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出 -->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数 -->
<configuration status="WARN" monitorInterval="30">
	<!--先定义所有的appender -->
	<appenders>
		<!--这个输出控制台的配置 -->
		<console name="Console" target="SYSTEM_OUT">
			<!--输出日志的格式 -->
			<PatternLayout
				pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] - %l - %m%n" />
		</console>
		
		<!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
		<RollingFile name="RollingFileError"
			fileName="logInformation/error.log"
			filePattern="logInformation/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
			<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
			<ThresholdFilter level="error" onMatch="ACCEPT"
				onMismatch="DENY" />
			<PatternLayout
				pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] - %l - %m%n" />
			<Policies>
				<TimeBasedTriggeringPolicy />
				<SizeBasedTriggeringPolicy size="100 MB" />
			</Policies>
		</RollingFile>
		<RollingFile name="RollingFileDebug"
			fileName="logInformation/debug.log"
			filePattern="logInformation/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log">
			<ThresholdFilter level="debug" onMatch="ACCEPT"
				onMismatch="DENY" />
			<PatternLayout
				pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] - %l - %m%n" />
			<Policies>
				<TimeBasedTriggeringPolicy />
				<SizeBasedTriggeringPolicy size="100 MB" />
			</Policies>
			<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
			<DefaultRolloverStrategy max="20" />
		</RollingFile>
		<RollingFile name="RollingFileInfo"
			fileName="logInformation/info.log"
			filePattern="logInformation/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
			<ThresholdFilter level="info" onMatch="ACCEPT"
				onMismatch="DENY" />
			<PatternLayout
				pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] - %l - %m%n" />
			<Policies>
				<TimeBasedTriggeringPolicy />
				<SizeBasedTriggeringPolicy size="100 MB" />
			</Policies>
			<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
			<DefaultRolloverStrategy max="20" />
		</RollingFile>
		
	</appenders>
	<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
	<loggers>
		<!--过滤掉spring和mybatis的一些无用的DEBUG信息 -->
		<logger name="org.springframework" level="INFO"></logger>
		<logger name="org.mybatis" level="INFO"></logger>
		<root level="all">
			<appender-ref ref="Console" />
			<appender-ref ref="RollingFileError" />
			<appender-ref ref="RollingFileDebug" />
			<appender-ref ref="RollingFileInfo" />
		</root>
	</loggers>
</configuration>

XML文件具体内容

控制台配置

这部分构成相对简单,需要了解的是pattern的内容含义:

  • %d:表示日期,后面是日期的格式,可以按喜好设置;
  • %p:表示日志记录的异常的类别或者说日志的级别;
  • %l:表示日志记录的异常的类名、方法名、具体行数;
  • %m:表示传入的具体信息,字符串;
  • %n:对应不同系统的换行符;
<!--这个输出控制台的配置 -->
<console name="Console" target="SYSTEM_OUT">
	<!--输出日志的格式 -->
	<PatternLayout
		pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] - %l - %m%n" />
</console>
输出到文件配置

以输出error及以上级别日志到文件的配置为例,

<!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
<RollingFile name="RollingFileError"
	fileName="logInformation/error.log"
	filePattern="logInformation/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
	<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
	<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
	<PatternLayout
		pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] - %l - %m%n" />
	<Policies>
		<TimeBasedTriggeringPolicy />
		<SizeBasedTriggeringPolicy size="100 MB" />
	</Policies>
</RollingFile>
  • 这里使用了RollingFile,可以规定每个log文件的大小;
  • fileName这个字符串表示要输出的文件的位置,以及文件名称;
  • filePattern表示当输出的日志信息超出RollingFile文件规定的大小时,可以将文件自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档;
  • level表示可以输出的文件的级别,在这里ThresholdFilter的设置可以输出 error及以上优先级的日志;
  • size是每个log文件的大小上限;
定义logger

只有定义了logger并引入的appender,appender才会生效

<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
<loggers>
	<!--过滤掉spring和mybatis的一些无用的DEBUG信息 -->
	<logger name="org.springframework" level="INFO"></logger>
	<logger name="org.mybatis" level="INFO"></logger>
	<root level="all">
		<appender-ref ref="Console" />
		<appender-ref ref="RollingFileError" />
		<appender-ref ref="RollingFileDebug" />
		<appender-ref ref="RollingFileInfo" />
	</root>
</loggers>

log4j的配置

由于开始的时候没有注意到下载的版本是log4j2,以及log4j2和log4j的区别,所以看了很多关于log4j配置的文章,发现后本想重新下载log4j,但本着使用新技术的原则,还是继续学习寻找的log4j2的配置,接下来对于log4j简要地给与介绍。
首先在下面的链接处下载log4j的1.2.17:
Download Apache log4j 1.2.17
如前所述,log4j的配置使用的是log4j.properties文件,这里的导入库和配置的模式和log4j2大致相同,添加文件为General下的File,将文件名手动改为带后缀名的log4j.properties即可。
在这里插入图片描述
具体语法详见下面的链接进行学习:
最详细的Log4J使用教程

log4j2的使用简介

示例代码如下:

package logging;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class logTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Logger logger = LogManager.getLogger(logTest.class);
		for (int i = 0; i < 100; i++) {
			logger.debug("This is debug message.");
			logger.error("This is error message.");
			logger.warn("This is warn message.");
			logger.info("This is info message.");
		}
	}

}

首先通过 Logger logger = LogManager.getLogger(logTest.class); 新建一个logger,接下来可以通过其debug, error, warn, info方法记录日志信息,输出如下:
在这里插入图片描述
这里logger的构造方法和log4j1.x中的方法不同,如果想要使用log4j1.x中的方式,可以尝试导入 log4j-1.2-api-2.13.3.jar 的包,其可以保证log4j1.x中的方法在log4j2中兼容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值