javaEE开发之使用log4j记录日志

本文介绍了在JavaEE web开发中,如何利用log4j框架记录和管理日志,以帮助开发者在遇到bug时快速定位问题。通过自定义日志级别并在代码中插入日志,便于后期维护和调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

web开发中,当项目开发完毕后,可能会有些bug存在,程序出现bug后,如何快速定位并修改,就需要对这些程序的运行过程做一个记录,并保存起来,以便维护。

常用的是使用log4j框架,通过自定义日志级别,然后在代码中打下日志。

首先,写一个工具类LogUtil:

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.net.SyslogAppender;

/**
 * 自定义级别日志定义log方法
 */
public class LogUtil {

	// 自定义等级
	private static final Level CUSTOM_LEVEL = new CustomLevel(25000, "CUSTOM",
			SyslogAppender.LOG_LOCAL0);

	// 单例模式
	private static LogUtil logUtil = new LogUtil();

	private LogUtil() {
	}

	private static Logger loggerCustom = null;

	public static LogUtil getLogUtil(Object message) {
		loggerCustom = Logger.getLogger(message.toString().substring(6));
		return logUtil;
	}

	public void customLog(Object message) {
		loggerCustom.log(CUSTOM_LEVEL, message);
	}
}
然后,自定义一个日志级别过滤器CustomLogFilter:

import org.apache.log4j.spi.Filter;
import org.apache.log4j.spi.LoggingEvent;

/**
 * 自定义日志级别过滤器
 * 
 */
public class CustomLogFilter extends Filter {
	boolean acceptOnMatch;
	int levelMin;
	int levelMax;

	public int getLevelMin() {
		return levelMin;
	}

	public void setLevelMin(int levelMin) {
		this.levelMin = levelMin;
	}

	public int getLevelMax() {
		return levelMax;
	}

	public void setLevelMax(int levelMax) {
		this.levelMax = levelMax;
	}

	public boolean isAcceptOnMatch() {
		return acceptOnMatch;
	}

	public void setAcceptOnMatch(boolean acceptOnMatch) {
		this.acceptOnMatch = acceptOnMatch;
	}

	@Override
	public int decide(LoggingEvent lgEvent) {
		int inputLevel = lgEvent.getLevel().toInt();
		if (inputLevel >= levelMin && inputLevel <= levelMax) {
			return 0;
		}
		return -1;
	}

}
之后,自定义一个日志级别类,CustomLevel:

import org.apache.log4j.Level;

/**
 * 
 * 自定义Custom级别
 * 
 */
public class CustomLevel extends Level {
	private static final long serialVersionUID = 1L;

	public CustomLevel(int level, String levelStr, int syslogEquivalent) {
		super(level, levelStr, syslogEquivalent);
	}
}
最后,在log4j.xml中配置如下信息:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "log4j.dtd">

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
	<!-- 输出到控制台 -->
	<appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
		<!-- 输出格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%-5p] [%d{yyyy年MM月dd日  HH:mm:ss,SSS\}] %c - %m%n" />
		</layout>
		<!--过滤器设置输出的级别 -->
		<filter class="com.telek.utils.CustomLogFilter">
			<param name="levelMin" value="25000" />
			<param name="levelMax" value="25000" />
			<param name="AcceptOnMatch" value="true" />
		</filter>
	</appender>
	<!-- 输出到指定文件 -->
	<appender name="Info" class="org.apache.log4j.RollingFileAppender">
		<param name="File"
			value="E:/WorkspaceForJava/UsedMallMinaServer/WebRoot/log/info.log" /><!-- 
			设置日志输出文件名 -->
		<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
		<param name="Append" value="true" />
		<param name="MaxBackupIndex" value="10" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%-5p] [%d{HH:mm:ss}] %c - %m%n" />
		</layout>
		<!-- 过滤级别为只有info信息 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="levelMin" value="INFO" />
			<param name="levelMax" value="INFO" />
			<param name="AcceptOnMatch" value="true" />
		</filter>
	</appender>

	<appender name="Debug" class="org.apache.log4j.RollingFileAppender">
		<param name="File"
			value="E:/WorkspaceForJava/UsedMallMinaServer/WebRoot/log/debug.log" /><!-- 
			设置日志输出文件名 -->
		<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
		<param name="Append" value="true" />
		<param name="MaxBackupIndex" value="10" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%-5p] [%d{yyyy年MM月dd日  HH:mm:ss}] %c - %m%n" />
		</layout>
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="levelMin" value="DEBUG" />
			<param name="levelMax" value="DEBUG" />
			<param name="AcceptOnMatch" value="true" />
		</filter>
	</appender>

	<appender name="Warn" class="org.apache.log4j.RollingFileAppender">
		<param name="File"
			value="E:/WorkspaceForJava/UsedMallMinaServer/WebRoot/log/warn.log" /><!-- 
			设置日志输出文件名 -->
		<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
		<param name="Append" value="true" />
		<param name="MaxBackupIndex" value="10" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%-5p] [%d{yyyy年MM月dd日  HH:mm:ss}] %c - %m%n" />
		</layout>
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="levelMin" value="WARN" />
			<param name="levelMax" value="WARN" />
			<param name="AcceptOnMatch" value="true" />
		</filter>
	</appender>

	<appender name="Error" class="org.apache.log4j.RollingFileAppender">
		<param name="File"
			value="E:/WorkspaceForJava/UsedMallMinaServer/WebRoot/log/error.log" /><!-- 
			设置日志输出文件名 -->
		<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
		<param name="Append" value="true" />
		<param name="MaxBackupIndex" value="10" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%-5p] [%d{yyyy年MM月dd日  HH:mm:ss}] %c - %m%n" />
		</layout>
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="levelMin" value="ERROR" />
			<param name="levelMax" value="ERROR" />
			<param name="AcceptOnMatch" value="true" />
		</filter>
	</appender>
	<appender name="MinaCustom" class="org.apache.log4j.RollingFileAppender">
		<param name="File"
			value="E:/WorkspaceForJava/UsedMallMinaServer/WebRoot/log/custom.log" />
		<!--设置日志输出文件名 -->
		<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
		<param name="Append" value="true" />
		<param name="MaxBackupIndex" value="10" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%-5p] [%d{yyyy年MM月dd日  HH:mm:ss,SSS\}] - %m%n" />
		</layout>
		<filter class="com.telek.utils.CustomLogFilter">
			<param name="levelMin" value="25000" />
			<param name="levelMax" value="25000" />
			<param name="AcceptOnMatch" value="true" />
		</filter>
	</appender>
	<root>
		<level value="ALL" />
		<appender-ref ref="myConsole" />
		<appender-ref ref="Info" />
		<appender-ref ref="Debug" />
		<appender-ref ref="Warn" />
		<appender-ref ref="Error" />
		<appender-ref ref="MinaCustom" />
	</root>
</log4j:configuration>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值