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

关于遍历服务每次启动生成新的日志文件的逻辑 背景 最近遍历服务遇到一个问题, 由于遍历服务是以jar的形式提供给到其他调用方使用的,所以有可能会存在说一个服务中,可能会起来多个进程调用。然后遍历服务的日志使用的是log4j的框架,默认的配置会出现所有的进程的日志都会打到同一个日志文件中,这个就导致了我们在分析问题的时候就非常的被动,因为没有办法很快的分析都对应的某一台设备的上下文的日志了。 解决 研究了好久以后, 终于找到了解决方法 : log4j2配置文件动态指定日志文件名称, 这篇文章中给提供了思路,可以通过系统环境变量的方式,就可以动态去指 阅读详情

依赖的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());
	}
	
}





flume系列之:日志配置文件log4j.properties flume系列之:日志配置文件log4j.properties一、Log4j日志格式说明二、flume日志配置文件log4j.properties三、flume实际输出日志样式 一、Log4j日志格式说明 在配置文件中通过log4j.appender.appenderName.layout.ConversionPattern设置日志输出格式。 %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,%d{dd MMM yyyy HH:mm:ss,SSS} ,输出类似:16 一月 阅读详情

相关推荐

阿里巴巴达摩院人工智能训练师(高级)

阿里巴巴达摩院人工智能训练师(高级)

huang0612123的博客 1万+

Log4J 配置之以日期为文件名的日志

### set log levels ### log4j.rootLogger = debug,stdout,D ,E ### 输出到控制台 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j

liuyu2783的博客 4490

CanOpen PDO映射实战:从原理到配置的完整指南

本文详细解析了CanOpen PDO映射的原理与配置流程,从基础通信机制到实战配置步骤,涵盖禁用PDO、清空映射、逐项映射和使能PDO等关键环节。特别针对西门子G120变频器、台达伺服和倍福CX控制器等不同厂商设备,提供了具体的配置技巧和常见问题排查指南,帮助工程师快速掌握多厂商设备间的PDO通信配置。

weixin_30718391的博客 516

Java中log4j.xml如何设置输出日志按照系统日期命名

1,重写log4j中的Appender,例如DailyRollingFileAppender /* *重写DailyRollingFileAppender中的setFile方法,在该方法里面实现日期命名的日志 * * */ public class LogAppender extends DailyRollingFileAppender { SimpleDateFormat sim...

橡皮博客 2286

sldd数据字典导出为excel

sldd导出为excel

zpfjf的博客 2237

Android自动化新方案:ESP32-C3蓝牙HID模拟触控与手势操作实战(附源码)

本文详细介绍了使用ESP32-C3通过蓝牙HID协议实现Android设备自动化操作的完整方案。该硬件方案成本低廉且能完美规避系统风控,可模拟鼠标移动、点击及复杂手势操作,延迟低于50毫秒,适用于游戏连招和应用测试等场景。文章包含完整的源码实现和性能优化技巧。

kotlin6android的博客 377

log4j生成文件名带日期的文件

文章目录生成文件名有日期的文件 import org.apache.log4j.Logger; import org.junit.Test; public class Test { // 构造记录器,形参是记录器所在的类,表示要在该类做日志 private static Logger log = Logger.getLogger(Test.class.getClass()); @Test ...

weixin_38927257的博客 5658

从入门到精通|Yalmip+Cplex在电力系统中的应用(Matlab代码实现)

​ 火电成本包括运行成本、碳捕集成本,其中火电运行成本由运行维护成 本和发电煤耗成本构成,发电煤耗与其出力关系: ,F 为机组煤耗量(kg/h),P 为机组出力/MW;运行维护成本按照 0.5 倍煤耗成本考虑,碳捕集成本取决于碳排放量及碳捕集单价,火电机组相关参数如附表 1 所示,电煤价格为 700 元/t ​

weixin_46039719的博客 1552

log4j根据变量动态生成文件名

log4j根据变量动态生成文件名

xiaqingxue930914的专栏 9382

matplotlib保存图片设置分辨率总是96dpi,好烦躁,教你一招轻松解决

matplotlib保存图片设置分辨率总是96dpi,好烦躁,教你一招轻松解决 目录 matplotlib保存图片设置分辨率总是96dpi,好烦躁,教你一招轻松解决 #使用plt.savefig("cm.png",dpi = 300)为什么不管用 #plt.rcParams也不管用 #解决方案 在做论文的过程中,许多期刊或者会议对图片的分辨率有明确的要求,例如,dpi=300。 之前画曲线图都是采取保存方式为savefig(dpi=300),然后查看保存图片的属性信息,然而你看到的现象是

data+scenario+science+insight 8799

从源码编译CesiumForUnreal

从源码编译CesiumForUnreal插件

专注GIS开发 5643

log4j2配置日志文件以时间方式显示

===背景=== 很多时候,程序的log日志需要有相应的时间,以便跟踪和维护。java程序,使用log4j创建有时间的log文档。(PS:源码来自小强,不过技能倒是get到了,非常的实用) ===jar包准备两种方法=== ====普通工程直接下载拷贝实用jar包==== log4j-api-2.6.2, log4j-core-2.6.2,log4j-slf4j-impl-2.6.2,sl

真的想不通why的博客 1万+

BevFusion (1): 传感器介绍

激光雷达,也称光学雷达(LIght Detection And Ranging)是激光探测与测距系统的简称,它通过测定传感器发射器与目标物体之间的传播距离,分析目标物体表面的反射能量大小、反射波谱的幅度、频率和相位等信息,从而呈现出目标物精确的三维结构信息。激光雷达是自动驾驶车辆的关键传感器,如下图所示,车辆上方旋转的圆柱体对应就是激光雷达传感器。

@bangbang的博客 1475

log4j动态生成保存文件名

项目中有个要求是用log4j做日志的记录,但是要求生成的文件名为用户的ip+当天的时间,这就需要动态的生成文件名了,看了下log4j的配置文件没有发现支持的动态文件名的功能。虽说用${}能去到变量,单要求的是必须在读取配置文件前设置变量。最后在网上发现了一个方法,用来动态生成文件名的 import org.apache.log4j.FileAppender; import org.apach...

hqmln的博客 691

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Log4j 生成动态年月日log文件名

将log文件输出在同一个文件内,如果log数量庞大,查找起来将十分不便,所以一般我们都是将log分日期存储的。配置如下: log4j.rootLogger = info,console,log,error log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = ...

yoyo990dl的专栏 860

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

log4j输出日志文件时以当前日期为文件名

log4j输出日志文件时以当前日期为文件名 在初始化日志配置后加入以下代码: [code="java"]Appender appender = LogManager.getLoggerRepository().getRootLogger().getAppender("A2"); if(appender instanceof FileAppender) { File...

Ray 2287

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java中程序动态配置log4j日志

上一篇讲了如何配置log4j,但是都是固定的输出方式,如果我们想要动态的改变输入方式该怎么办呢? 比如我们有一个网络游戏在测试阶段,而这个游戏中玩家是以房间的形式组合在一起,这时我们如果想要测试房间内的逻辑是否正常,输出log的话都会存放在同一个日志文件内,如果遇到bug想要找起来非常困难,所以我们需要对每一个房间生成一个独立的log文件来进行保存。 代码: public stati

zgjllf1011的博客 4293

java log4j 多个文件_log4j输出多个自定义日志文件,动态配置路径

Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。1. 配置文件Log4J配置文件的基本格式如下:#配置根Loggerlog4j.rootLogger = [ level ] , appenderName1, appenderName...

weixin_35702498的博客 1217

log4j2的RollingFileAppender

RollingFileAppender 是一种可以根据特定条件滚动生成新日志文件的输出源,它能够有效地管理日志文件,避免单个文件过大,并提供了灵活的文件命名和存储策略。TimeBasedTriggeringPolicy(基于时间的触发策略)SizeBasedTriggeringPolicy(基于大小的触发策略)来格式化日志事件,并且配置了基于时间的触发策略。)创建一个新的日志文件,文件命名模式为。的文件,并在每天(根据日期格式。被配置为将日志写入名为。灵活的文件命名和存储。

Java程序员的知识博客 1968

log4j将日志写入任意名字的文件中,支持动态写入

log4j配置: log4j.logger.presentOperatorLog=DEBUG, stdout, ilog #既输出到控制台,也写入文件 log4j.additivity.presentOperatorLog = false #日志不输出到父日志中,既rootLogger中 log4j.appender.ilog=org.apache.log4j.FileAppender

AndyXuq的专栏 4522

log4j2配置定期清理日志文件

<?xml version="1.0" encoding="UTF-8"?> <!-- configuration 属性 monitorInterval: 置配置文件的动态加载时间(s),在程序运行过程中,如果修改配置文件,程序会随之改变。 status: 设置 log4j 日志框架内部输出的日志级别 日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG

qq_36555149的博客 5738

日志文件内容部分丢失的问题

起因 我做了一个模块,会统计某个用户的接口调用次数,调用次数是会累加并持久化到mysql,并且每次接口调用的具体结果,都会记录在日志中。 前几天我根据日志进行接口调用次数统计,发现和mysql中记录的次数不一致,并且相差很大。于是便开始进行了排查。 排查 首先为了确认是否是我的统计逻辑出了问题。我动态地观察了日志输出和mysql调用次数数据的变化情况。每次观察10s,发现10s内日志中新增的关键字数量,和mysql调用次数的增加数量是一致的。多次观察,均未发现问题。则说明统计数据的逻辑是正确的。 后来,我想

vcj1009784814的博客 2834

log4j2.xml 配置详解

使用log4j2打印log日志,然后,在jvm的启动参数中,在不同的启动脚本里面设置不同的log的目录地址,log的文件名称,log的级别。下面是一个简单的log4j2.xml的例子。log4j2.xml中的${sys:x.root.logger},相当于System.getProperty("x.root.logger");在启动脚本中指定log4j2的配置文件,指定日志级别,指定日志文件名称,指定日志目录。下面是从其他地方弄过来的一个很完整的、很细的一个例子。系统获取脚本中-D设置的key对应的值。

请叫我大师兄 1万+

Log4j2使用简介

在接口实现中对ServletContext添加了Log4jServletContextListener,log4jConfigLocation默认为/WEB-INF/log4j2.xml。在Servlet 3.0及以后版本中,Servlet提供了ServletContainerInitializer接口,在Servlet容器初始化阶段执行该接口。应用中使用log4j2日志框架,通过适配器,实现log4j2底层转调slf4j接口。应用中使用slf4j日志框架,绑定log4j2作为接口的具体实现。

崔显龙的博客 1189
上一篇: Python学习笔记-ubuntu安装setuptools及使用
下一篇: ant运行java不能输出log4j日志问题的解决
spring292713
博客等级 码龄16年 13粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值