返回顶部
首页 > 资讯 > 后端开发 > Python >log4j如何根据变量动态生成文件名
  • 699
分享到

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

2024-04-02 19:04:59 699人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录根据变量动态生成文件名简单的log4j设置简单实例log4j动态文件名一、按照用户ID来生成log二、在batch程序中,通过一个设定来实现每个batch三、在batch程序中,

根据变量动态生成文件名

简单的log4j设置

一般情况下,log4j配置文件简单的设置为:


log4j.rootLogger=debug,stdout,R
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=test.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.DatePattern = '.'yyyy-MM-dd
log4j.appender.R.layout=ex.log4j.ExPatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c %5p  - %m%n
log4j.appender.R.MaxBackupIndex=1

简单实例

java代码如下:


public class LogTest {
static Logger log = Logger.getLogger(LogTest.class);
public static void main(String[] args) throws IOException {
PropertyConfigurator.configure("log4j.properties");
log.debug("helo");
}
}

一般如上设置即可满足简单的log4j需求。

如果需要根据程序中的变量,将日志打到不同的文件中时,(如:根据某个ID,这样对于大量日志时更加容易查找到想要的日志)

只需在java代码中过去到所配置的FileAppender,然后serFile来修改文件名。

java代码如下:


FileAppender appender = (FileAppender) log.getRootLogger().getAppender("R");
appender.setFile(filePath/fileName);
appender.activateOptions();

日志打印前,设置以上代码,即可。

注意:加上 appender.activateOptions(); 可以使得后面打印的日志不会将之前的日志覆盖。

log4j动态文件名

项目中,对log的输出有多种多样的要求,下面具体分析一下动态log文件名输出的。

一、按照用户ID来生成log

这种情况,可以根据每个用户ID来动态生成logger。

代码如下:


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 getLoggerByName(String name) {
        // 生成新的Logger
        // 如果已經有了一個Logger實例返回現有的
        Logger logger = Logger.getLogger(name);
        // 清空Appender。特別是不想使用現存實例時一定要初期化
        logger.removeAllAppenders();
        // 設定Logger級別。
        logger.setLevel(Level.DEBUG);
        // 設定是否繼承父Logger。
        // 默認為true。繼承root輸出。
        // 設定false後將不輸出root。
        logger.setAdditivity(true);
        // 生成新的Appender
        FileAppender appender = new RollingFileAppender();
        PatternLayout layout = new PatternLayout();
        // log的输出形式
        String conversionPattern = "[%d] %p %t %c - %m%n";
        layout.setConversionPattern(conversionPattern);
        appender.setLayout(layout);
        // log输出路径
        // 这里使用了环境变量[catalina.home],只有在Tomcat环境下才可以取到
        String tomcatPath = java.lang.System.getProperty("catalina.home");
        appender.setFile(tomcatPath + "/logs/" + name + ".log");
        // log的文字码
        appender.setEncoding("UTF-8");
        // true:在已存在log文件后面追加 false:新log覆盖以前的log
        appender.setAppend(true);
        // 适用当前配置
        appender.activateOptions();
        // 将新的Appender加到Logger中
        logger.addAppender(appender);
        return logger;
    }
}

二、在batch程序中,通过一个设定来实现每个batch

文件名不同的设定。

log.xml定义


    <appender name="daily" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="/opt/tuhan.crm/batch/log/${tuhan.crm.log.name}.log" />
        <param name="threshold" value="debug"/>
        <param name="DatePattern" value="yyyyMMdd"/>
        <param name="append" value="true" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%d{yyyy-MMM-dd HH:mm:ss,SSS}\t[%-5p]\t(%c:%L)\t%m%n"/>
        </layout>
    </appender>

log4j可以接受自定义环境变量,注意下面行【${tuhan.crm.log.name}】就是自定义环境变量


<param name="file" value="/opt/tuhan.crm/batch/log/${tuhan.crm.log.name}.log" />

那么环境变量如何设置呢,有2种方法

1.Java中设定(在使用配置文件之前, 要在程序中声明这些变量):


System.setProperty("tuhan.crm.log.name", "batch001");

2.在JVM设定


java -Xmx512M -Dtuhan.crm.log.name=batch001 com.stu.TestBatch001

三、在batch程序中,通过多个设定来实现每个batch

文件名不同的设定。

动态的配置文件路径: (log4j可以接受URL)


java.net.URL URL = consandpatt.class.getResource("/com/test/java/log/config/log4jConfig.properties");
PropertyConfigurator.configure(URL);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: log4j如何根据变量动态生成文件名

本文链接: https://lsjlt.com/news/160968.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • log4j如何根据变量动态生成文件名
    目录根据变量动态生成文件名简单的log4j设置简单实例log4j动态文件名一、按照用户ID来生成log二、在batch程序中,通过一个设定来实现每个batch三、在batch程序中,...
    99+
    2024-04-02
  • log4j怎么根据变量动态生成文件名
    这篇文章将为大家详细讲解有关log4j怎么根据变量动态生成文件名,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。根据变量动态生成文件名简单的log4j设置一般情况下,log4j配置文件简单的设置为:log4...
    99+
    2023-06-22
  • 如何根据动态SQL代码自动生成DTO
    当前的状况一般做数据库相关开发, 除非学习, 否则很少有人愿意直接使用JDBC。本来Java代码就比较啰嗦了,而直接用JDBC写代码之啰嗦简直有些令人发狂!所以在实际开发过程中,我们通常都会使用一些框架/库...
    99+
    2024-04-02
  • python如何根据文件名批量搜索文件
    这篇文章将为大家详细讲解有关python如何根据文件名批量搜索文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。需求场景,五百个文件里面,选取50个指定文件,放入新的文件夹里。1、准备工作1...
    99+
    2023-06-26
  • Angular如何根据组件名称动态创建组件
    这篇文章主要介绍Angular如何根据组件名称动态创建组件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、理解angular组件组件是一种特殊的指令,使用更简单的配置项来构建基于组...
    99+
    2024-04-02
  • vue如何根据权限生成动态路由、导航栏
    目录基本思路相关代码基本思路 1、创建vueRouter,用公共路由实例化 2、创建需要根据权限筛选的路由对象(在路由对象,添加必要的权限判断字段) 3、登录完成,由后端配合返回当前...
    99+
    2024-04-02
  • python如何动态生成函数名
    在python中动态生成函数名,具体方法如下:funcs = {'CONNECT': connect,'RAWFEED': rawfeed,'RAWCONFIG' : rawconfig,'TESTFEED': testfeed}funcs...
    99+
    2024-04-02
  • 如何使用JavaScript动态变量名
    这篇文章主要介绍“如何使用JavaScript动态变量名”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用JavaScript动态变量名”文章能帮助大家解决问题。eval(): eval() 函...
    99+
    2023-06-26
  • 如何让java只根据数据库表名自动生成实体类
    根据数据库表名生成实体类 公司用的jpa,没有用mybatis。所以也没有用mybatis自动生成。但有些数据库表字段太多,就想着一劳永逸了,连数据库注释都搞上去 第一种 这里使用的...
    99+
    2024-04-02
  • C#如何动态生成Word文档并填充数据
    这篇文章主要讲解了“C#如何动态生成Word文档并填充数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何动态生成Word文档并填充数据”吧!C#动态生成Word文档步骤之一:添加引用...
    99+
    2023-06-18
  • IDEA中如何根据数据库自动生成实体类
    这篇文章主要介绍“IDEA中如何根据数据库自动生成实体类”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“IDEA中如何根据数据库自动生成实体类”文章能帮助大家解决问题。1. IDEA连接数据库点击右侧...
    99+
    2023-07-05
  • vue类名如何获取动态生成的元素
    目录类名获取动态生成的元素如何获取并操作dom元素类名获取动态生成的元素 首先注意的是,该元素必须在id为app这个元素里面  new Vue({    el: "#app",   ...
    99+
    2024-04-02
  • 如何使用Hibernate根据实体类自动生成表
    本篇内容介绍了“如何使用Hibernate根据实体类自动生成表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一种方法这种方法需要配置 hi...
    99+
    2023-07-05
  • vue+el-element中根据文件名动态创建dialog的方法实践
    目录背景实现1.封装的/utils/dialogControl.js2.dialog文件定义 3.使用背景 在项目中使用对话框的通常做法是把对话框封装成组件,在使用的地方引入,然后...
    99+
    2024-04-02
  • jquery如何动态生成标签绑定事件
    这篇文章主要为大家展示了“jquery如何动态生成标签绑定事件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jquery如何动态生成标签绑定事件”这篇文章吧。结...
    99+
    2024-04-02
  • db_load如何生成数据库文件
    这篇文章主要介绍 db_load如何生成数据库文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!保存虚拟帐号和密码的文本文件无法被系统帐号直接调用。我们需要使用db_load 命令生...
    99+
    2024-04-02
  • MybatisPlus如何自动生成映射文件
    目录如何自动生成映射文件一、pom.xml二、MybatisPlusUtil工具类自动映射autoMappingBehavior与mapUnderscoreToCamelCaseau...
    99+
    2024-04-02
  • Tensorflow 如何从checkpoint文件中加载变量名和变量值
    假设你已经经过上千次的迭代,并且得到了以下模型: 则从这些checkpoint文件中加载变量名和变量值代码如下: model_dir = './ckpt-182802' imp...
    99+
    2024-04-02
  • vue+el-element中根据文件名动态创建dialog的方法是什么
    这篇文章给大家介绍vue+el-element中根据文件名动态创建dialog的方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。背景在项目中使用对话框的通常做法是把对话框封装成组件,在使用的地方引入,然后添加到...
    99+
    2023-06-22
  • 如何实现core文件自动生成配置文件
    这篇文章主要介绍如何实现core文件自动生成配置文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体执行步骤如下:1.编辑环境配置文件,让shell启动时自动设置ulimitvi /etc/profile...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作