使用log4j生成动态日志文件-文件名根据时间自动生成

本文介绍Log4j的日志配置方法及实现自定义日志记录的过程,包括依赖的jar包、log4j.properties配置详解及LoggerUtil工具类的设计与实现。

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

依赖的jar 

commons-logging-1.1.3.jar  log4j-1.2.17.jar  junit-4.10.jar(测试时使用)

log4j.properties配置

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %p %l : %m%n

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss}] %p %l : %m%n

# ConversionPattern参数的格式含义
# 格式名 含义 
# %c 输出日志信息所属的类的全名 
# %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28 
# %f 输出日志信息所属的类的类名 
# %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行 
# %m 输出代码中指定的信息,如log(message)中的message 
# %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” 
# %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推 
# %r 输出自应用启动到输出该日志信息所耗费的毫秒数 
# %t 输出产生该日志事件的线程名

log4j.rootLogger=info,stdout

日志生成器 LoggerUtil.java

package com.utils.log4j;


import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;

public class LoggerUtil {
   
    public static Logger getLog(Class<?> clazz) {
       
        Logger logger = Logger.getLogger(clazz);  // 生成新的Logger
        logger.removeAllAppenders(); // 清空Appender,特別是不想使用現存實例時一定要初期化
        logger.setLevel(Level.DEBUG); // 设定Logger級別。
        logger.setAdditivity(true); // 设定是否继承父Logger。默认为true,继承root输出;设定false后将不出书root。
        
        FileAppender appender = new RollingFileAppender(); // 生成新的Appender
        PatternLayout layout = new PatternLayout();
        layout.setConversionPattern("[%d{yyyy-MM-dd HH:mm:ss}] %p %l : %m%n"); // log的输出形式
        appender.setLayout(layout);
        
        appender.setFile(getTime("yyyy-MM-dd") + ".log");  // log输出路径
        appender.setEncoding("UTF-8"); // log的字符编码
        appender.setAppend(true);  //日志合并方式: true:在已存在log文件后面追加 false:新log覆盖以前的log
        appender.activateOptions();  // 适用当前配置
        
        logger.addAppender(appender); // 将新的Appender加到Logger中
        return logger;
    }
    
    private static String getTime(String format) {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(new Date());
    }
}

测试类

package com.utils.log4j.test;

import org.apache.log4j.Logger;
import org.junit.Test;

public class LoggerUtilTest {
	private static Logger logger = LoggerUtil.getLog(LoggerUtilTest.class);
	
	@Test
	public void add() {
		logger.info(Thread.currentThread().getStackTrace()[1].getMethodName());
	}
	
	@Test
	public void view() {
		logger.info(Thread.currentThread().getStackTrace()[1].getMethodName());
	}
	
	@Test
	public void edit() {
		logger.info(Thread.currentThread().getStackTrace()[1].getMethodName());
	}
	
	@Test
	public void delete() {
		logger.info(Thread.currentThread().getStackTrace()[1].getMethodName());
	}
	
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值