log4j日志工具类

Java无配置log4j日志引入方法
博客介绍了Java使用无配置log4j日志的相关内容,包含工具类、测试类,还说明了普通项目需引入log4j - 1.2.17.jar包,以及maven项目的依赖情况。

工具类:

import java.util.Objects;

import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;

/**
 * log4j日志工具类
 * @author zql
 * @createTime 2020-12-13 22:49:28
 * @version 1.0
 *
 */
public class LogUtil {

	/**
	 * 默认日志级别
	 */
	private static Level LEVEL = Level.INFO;
	
	/**
	 * 默认日志最低输出级别
	 */
	private static Level PRIORITY = Level.INFO;
	
	/**
	 * 默认日志输出编码UTF-8
	 */
	private static String ENCODING = "utf-8";

	/**
	 * 默认日志文件名
	 */
	private static String LOG_FILE_NAME = "info";

	/**
	 * 用于获取一个以当前线程名命名的logger
	 * @author zql
	 * @createTime 2020-12-13 22:51:11
	 *
	 * @return
	 */
	public static Logger getLogger() {
		String code = LogUtil.LOG_FILE_NAME;
		
		// 判断logger是否已经存在,logger存在且该logger已配置code命名appender则直接返回
		if (Objects.nonNull(LogManager.exists(code))) {
			Logger logger = LogManager.getLogger(code);
			if (Objects.nonNull(logger)) {
				return logger;
			}
		}
		
		// 生成logger
		Logger logger = LogManager.getLogger(code);
		
		// 不继承父类的Additivity
		logger.setAdditivity(true);
		// 设置日志级别
		logger.setLevel(LogUtil.LEVEL);
		// 生成新的Additivity
		RollingFileAppender appender = new RollingFileAppender();
		// 重命名appender
		appender.setName(code);
		
		// log的输出形式
		PatternLayout layout = new PatternLayout();
		String cp = "[ %p ] [%d{yyyy-MM-dd HH:mm:ss,SSS} %l ]:%m%n";
		layout.setConversionPattern(cp);
		appender.setLayout(layout);
		// 日志输出路径,实际通过项目配置文件进行读取
		String logOutPath = "E:\\logs";
		appender.setFile(logOutPath + "\\" + code + ".log");
		// log文件备份数量
		appender.setMaxBackupIndex(10);
		// log文件大小
		appender.setMaxFileSize("30MB");
		// log的文字码
		appender.setEncoding(LogUtil.ENCODING);
		// 设置日志信息的最低输出级别
		appender.setThreshold(LogUtil.PRIORITY);
		// true:在已存在log文件后面追加,false:新log覆盖以前的log
		appender.setAppend(true);
		// 适用当前的配置
		appender.activateOptions();
		
		// 默认不输出到控制台,实际通过项目配置文件进行读取
		boolean isOutConsole = true;
		ConsoleAppender console = null;
		if (isOutConsole) {
			console = new ConsoleAppender();
			// 设置控制台最低输出级别
			console.setThreshold(Level.DEBUG);
			console.setLayout(layout);
			console.setEncoding(LogUtil.ENCODING);
			console.activateOptions();
		}
		
		// 将新的Appender设置到Logger中,利用同步代码块防止多线程环境下,同一个logger下加入两个同名appender,导致日志重复打印
		synchronized(LogUtil.class) {
			if (Objects.isNull(logger.getAppender(code))) {
				logger.addAppender(appender);
			}
			if (isOutConsole) {
				logger.addAppender(console);
			}
		}		
		return logger;
	}

	/**
	 * 重置日志文件名
	 * @author zql
	 * @createTime 2020-12-13 23:14:49
	 *
	 * @param code
	 */
	public static void resetLogFileName(String code) {
		LogUtil.LOG_FILE_NAME = code;
	}
	
	/**
	 * 重置日志打印级别
	 * @author zql
	 * @createTime 2020-12-13 23:17:01
	 *
	 * @param level
	 */
	public static void setLevel(Level level) {
		LogUtil.LEVEL = level;
	}
	
	/**
	 * 重置日志最低输出级别
	 * @author zql
	 * @createTime 2020-12-13 23:19:16
	 *
	 * @param priority
	 */
	public static void setPriority(Level priority) {
		LogUtil.PRIORITY = priority;
	}
}

测试类:


import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import top.zqlweb.util.tool.LogUtil;
/**
 * log4j日志工具测试类
 * @author zql
 * @createTime 2020-12-13 22:49:28
 * @version 1.0
 *
 */
public class LogUtilTest {

    public static void main(String[] args) {
        Logger logger1 = LogUtil.getLogger();
        logger1.info("测试info");

        LogUtil.resetLogFileName("error");
        Logger logger2 = LogUtil.getLogger();
        logger2.error("测试error");

        // 重置日志打印输出级别
        LogUtil.setLevel(Level.DEBUG);
        LogUtil.setPriority(Level.DEBUG);
        // 把DEBUG日志级别的打印到debug.log日志文件下
        LogUtil.resetLogFileName("debug");
        LogUtil.getLogger().debug("测试debug");
    }
}


普通项目需要引入的包
log4j-1.2.17.jar

maven项目依赖

<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值