返回顶部
首页 > 资讯 > 后端开发 > Python >log4j2 RollingRandomAccessFile配置过程
  • 962
分享到

log4j2 RollingRandomAccessFile配置过程

2024-04-02 19:04:59 962人浏览 独家记忆

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

摘要

log4j2 RollingRandoMaccessFile配置 一、需求背景 1. 日志按小时压缩成zip文件。 2. 仅保存距离当前时间最近24小时的历史压缩文件。 3. 压缩封

log4j2 RollingRandoMaccessFile配置

一、需求背景

1. 日志按小时压缩成zip文件。

2. 仅保存距离当前时间最近24小时的历史压缩文件。

3. 压缩封存的zip文件,按照零点为参考点纠偏。

4. 将com.roadway.acceptor.base.DebugUtils类的日志输出到指定文件,且不再输出到其他文件。

二、log4j2 配置实现


<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" monitorInterval="120">
    <properties>  
        <property name="MSG_LOG_HOME">/data/gpslog</property>
    </properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d [%t] %-5p [%c] - %m%n" />
        </Console>
        <RollingRandomAccessFile name="msgAppender" immediateFlush="true"
            fileName="${MSG_LOG_HOME}/msg.log"
            filePattern="${MSG_LOG_HOME}/backup/msg.%d{yyyyMMddHH}.zip">
            <Filters>
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="%m%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>  
            <DefaultRolloverStrategy max="24">
                <Delete basePath="${MSG_LOG_HOME}" maxDepth="2">
                  <IfFileName glob="*/msg.*.zip" />
                  <IfLastModified age="24H" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <AsyncLogger name="com.roadway.DebugUtils" additivity="FALSE" level="INFO">
            <appender-ref ref="msgAppender" />
        </AsyncLogger>
    </Loggers>
</Configuration>

三、配置说明

1. monitorInterval,博客配置的为120,单位为秒。即在服务运行过程中发生了log4j2配置文件的修改,log4j2能够在monitorInterval时间范围重新加载配置,无需重启应用。

2. property配置文件全局属性的声明,使用方式为:${声明的属性名称}。

${sys:catalina.home}为Tomcat部署路径,例如:/data/tomcat。

3. RollingRandomAccessFile基本属性

  • name:Appender名称
  • immediateFlush:log4j2接收到日志事件时,是否立即将日志刷到磁盘。默认为true。
  • fileName:日志存储路径
  • filePattern:历史日志封存路径。其中%d{yyyyMMddHH}表示了封存历史日志的时间单位(目前单位为小时,yyyy表示年,MM表示月,dd表示天,HH表示小时,mm表示分钟,ss表示秒,SS表示毫秒)。注意后缀,log4j2自动识别zip等后缀,表示历史日志需要压缩。

4. TimeBasedTriggeringPolicy

  • interval:表示历史日志封存间隔时间,单位为filePattern设置的单位值
  • modulate:表示是否历史日志生成时间纠偏,纠偏以零点为基准进行。比如:15:16生成了msg.2017041715.zip文件,那么纠偏后会在16:00生成msg.2017041716.zip

5. ThresholdFilter

  • level,表示最低接受的日志级别,博客配置的为INFO,即我们期望打印INFO级别以上的日志。
  • onMatch,表示当日志事件的日志级别与level一致时,应怎么做。一般为ACCEPT,表示接受。
  • onMismatch,表示日志事件的日志级别与level不一致时,应怎么做。一般为DENY,表示拒绝。也可以为NEUTRAL表示中立。

6. 保存24小时历史日志,但不想用文件索引


<DefaultRolloverStrategy max="24">
    <Delete basePath="${MSG_LOG_HOME}" maxDepth="2">
        <IfFileName glob="*/msg.*.zip" />
        <IfLastModified age="24H" />
    </Delete>
</DefaultRolloverStrategy>

备注:

1. age的单位:D、H、M、S,分别表示天、小时、分钟、秒

2. basePath表示日志存储的基目录,maxDepth=“1”表示当前目录。因为我们封存的历史日志在basePath里面的backup目录,所以maxDepth设置为2。

7. RollingRandomAccessFile设置bufferSize不生效问题

  • a. log4j2配置如下:

<RollingRandomAccessFile name="msgAppender" 
   immediateFlush="false" 
   bufferSize="512"
   fileName="${MSG_LOG_HOME}/msg.log"
   filePattern="${MSG_LOG_HOME}/backup/msg.%d{yyyyMMddHH}.zip">
   ......
  • b. 使用异步Logger方式输出日志

......
<AsyncLogger name="com.roadway.DebugUtils" additivity="FALSE" level="INFO">
    <appender-ref ref="msgAppender" />
</AsyncLogger>
......
  • c. 验证

经过反复测试验证,日志始终实时刷新到磁盘,这是为什么?查看log4j2文档发现:

Asynchronous loggers and appenders will automatically flush at the end of a batch of events, even if immediateFlush is set to false. This also guarantees the data is written to disk but is more efficient.

因此,如果期望使用 RollingRandomAccessFile异步的方式打印输出日志,bufferSize是无法生效的且也没有必要采用buffer的方式。

请参考log4j2官网地址

RandomAccessFile的常见用法

1.RandomAccessFile的简介

1.1为什么要用到RandomAccessFile

我们平常创建流对象关联文件,开始读文件或者写文件都是从头开始的,不能从中间开始,如果是开多线程下载一个文件我们之前学过的FileWriter或者FileReader等等都无法完成,而当前介绍的RandomAccessFile他就可以解决这个问题,因为它可以指定位置读,指定位置写的一个类,通常开发过程中,多用于多线程下载一个大文件.

1.2.常用方法简介

构造方法:RandomAccessFile raf = newRandomAccessFile(File file, String mode);

其中参数 mode 的值可选 "r":可读,"w" :可写,"rw":可读性;

成员方法:

seek(int index);可以将指针移动到某个位置开始读写;

setLength(long len);给写入文件预留空间:

2.RandomAccessFile的特点和优势

这个对象有两个优点

1.既可以读也可以写

RandomAccessFile不属于InputStream和OutputStream类系的它是一个完全独立的类,所有方法(绝大多数都只属于它自己)都是自己从头开始规定的,这里面包含读写两种操作

2.可以指定位置读写

RandomAccessFile能在文件里面前后移动,在文件里移动用的seek( ),所以它的行为与其它的I/O类有些根本性的不同。总而言之,它是一个直接继承Object的,独立的类。只有RandomAccessFile才有seek搜寻方法,而这个方法也只适用于文件.

3.通过案例来熟悉RandomAccessFile的最常用的操作

首先创建一个DownLoadThread的类继承Thread


public class DownLoadThread extends Thread {​
    private long start;
    private File src;
    private long total;
    private File desc;
​
    
    public DownLoadThread(long start, File src, File desc, long total) {
        this.start = start;
        this.src = src;
        this.desc = desc;
        this.total = total;
    }
​
    @Override
    public void run() {
        try {
            // 创建输入流关联源,因为要指定位置读和写,所以我们需要用随机访问流
            RandomAccessFile src = new RandomAccessFile(this.src, "rw");
            RandomAccessFile desc = new RandomAccessFile(this.desc, "rw");
​
            // 源和目的都要从start开始
            src.seek(start);
            desc.seek(start);
            // 开始读写
            byte[] arr = new byte[1024];
            int len;
            long count = 0;
            while ((len = src.read(arr)) != -1) {
                //分三种情况
                if (len + count > total) {
                     //1.当读取的时候操作自己该线程的下载总量的时候,需要改变len
                    len = (int) (total - count);
                    desc.write(arr, 0, len);
                    //证明该线程下载任务已经完毕,结束读写操作
                    break;
                } else if (len + count < total) {
                    //2.证明还没有到下载总量,直接将内容写入
                    desc.write(arr, 0, len);
                    //并且使计数器任务累加
                    count += arr.length;
                } else {
                    //3.证明改好到下载总量
                    desc.write(arr, 0, len);
                    //结束读写
                    break;
                }
            }
            src.close();
            desc.close();
​
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

然后定义主方法进行文件的测试


public class TestRandomAccess {​
    public static void main(String[] args) {
        //关联源
        File src = new File("a.txt");
        //关联目的
        File desc = new File("b.txt");
​
        //获取源的总大小
        long length = src.length();
        // 开两条线程,并分配下载任务
        new DownLoadThread(0, src, desc, length / 2).start();
        new DownLoadThread(length / 2 , src, desc, length - (length / 2)).start();
    }​
}

4.效果展示

a.txt的内容

b.txt的内容

5.总结

从以上分析可以看出RandomAccessFile最大两个特点:

1.可以指定位置开始操作

2.既可以读,也可以写

所以,我们但凡遇到不是需要从文件中中间部分开始读取的时候,可以使用RandomAccessFile这个类,比如:多线程下载是最常用的应该场景

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

--结束END--

本文标题: log4j2 RollingRandomAccessFile配置过程

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

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

猜你喜欢
  • log4j2 RollingRandomAccessFile配置过程
    log4j2 RollingRandomAccessFile配置 一、需求背景 1. 日志按小时压缩成zip文件。 2. 仅保存距离当前时间最近24小时的历史压缩文件。 3. 压缩封...
    99+
    2024-04-02
  • SpringBoot 使用log4j2的配置过程
    目录前言日志接口(slf4j)日志实现(log4j、logback、log4j2)配置过程涉及的POM部分文件前言 日志接口(slf4j) slf4j是对所有日志框架制定的一种规范、...
    99+
    2024-04-02
  • 使用log4j2自定义配置文件位置和文件名(附log4j2.xml配置实例)
    目录log4j2自定义配置文件位置和文件名web.xml配置生效配置文件日志配置文件实例log4j2.xml配置及例子1.使用log4j2需要下载包2.配置文件可以有三种格式3.日志...
    99+
    2024-04-02
  • SpringBoot整合Log4j2及配置步骤
    目录SpringBoot整合Log4j2以及配置详解1.加入依赖2.在src.java.main.resources目录下创建log4j2.xml文件 log4j2.xml文件内容如...
    99+
    2023-01-17
    SpringBoot配置Log4j2 SpringBoot整合Log4j2
  • springboot怎么配置和启用log4j2
    要在Spring Boot项目中配置和启用Log4j2日志框架,可以按照以下步骤进行操作: 添加Log4j2依赖:在pom.xml...
    99+
    2024-04-08
    springboot log4j2
  • gpsgate 配置过程
    要配置GPSGate,您可以按照以下步骤进行操作:1. 下载并安装GPSGate服务器软件。您可以从GPSGate官方网站上找到适用...
    99+
    2023-09-21
    gpsgate
  • Ubuntu9.04安装过程配置
    本篇内容主要讲解“Ubuntu9.04安装过程配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu9.04安装过程配置”吧!Ubuntu9.04是经常用到的系统软件,于是我研究了一下U...
    99+
    2023-06-16
  • 使用Log4j2代码方式配置实现线程级动态控制
    目录一 需求二 对外暴露的接口三 代码方式配置Log4j2日志对象四 线程级日志对象的设计五 标准日志头六 异常日志的堆栈信息打印七 测试一 需求 最近平台进行升级,要求日志工具从L...
    99+
    2024-04-02
  • sql server on linux 配置过程
    最近因为搭建公司的IT 系统,之前因为财务已经购买了的财务软件用到的是sql server,考虑到小公司,尽量减少额外的花销,所以最后还是决定直接使用sql server(本来想提升一下自己能力来使用mysql的,之前一直用sql serv...
    99+
    2021-07-22
    sql server on linux 配置过程 数据库入门 数据库基础教程 数据库 mysql
  • nginx的限流配置过程
    本篇内容介绍了“nginx的限流配置过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!limit_req zone=req_zone;严格依...
    99+
    2023-06-05
  • jdk1.8的环境配置过程
    目录jdk1.8的环境配置1. 什么是JDK?2. JRE是什么?3. JDK和JRE的区别是什么?4. JVM是什么?哈哈哈,正片开始:一.jdk的下载官网二.JDK的环境搭建测试...
    99+
    2022-11-13
    jdk1.8的环境配置 jdk1.8环境配置 jdk1.8配置
  • Goland的设置与配置全过程
    目录常用插件WIN10 配置golang环境变量添加GOPATHEdit Configurations选项设置gofmt与goimports,保存时自动格式化代码GoLand 取消 ...
    99+
    2023-02-16
    Goland设置 Goland配置 Goland设置与配置
  • Log4j2如何在Spring Boot中实现配置并使用
    这篇文章将为大家详细讲解有关 Log4j2如何在Spring Boot中实现配置并使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Spring Boot 可以集成很多不同的日志系统,其中最...
    99+
    2023-05-31
    springboot log4j
  • mysql主从复制配置过程
    主库配置 1. 配置mysql vim /etc/my.cn # 在文件中增加以下内容 server-id=1 # 保证server id唯一 log-bin = /var/lib/mysql/mysql-bin...
    99+
    2022-05-23
    mysql 主从复制 mysql 主从复制配置
  • Python3安装tensorflow及配置过程
    目录简介一. Aconada安装二. 配置conda环境变量三. TensorFlow安装四. 问题整理简介 TensorFlow 是一个端到端开源机器学习平台。它拥有一个全面而灵活的生态系统,其中包含各种工具、库和...
    99+
    2022-06-02
    Python3安装tensorflow Python tensorflow安装
  • MySQL配置文件my.ini全过程
    目录mysql配置文件my.inimy.ini文件位置配置参数MySQL初始化配置文件my.iniMySQL配置文件my.ini my.ini文件位置 1、在我们的电脑上面找到mysql的安装路径,点击进去之后可以看到m...
    99+
    2024-04-02
  • QT 5 配置MySQL 过程记录
    配置过程记录一下,年纪大了记性很差……0 安装环境 Win10x64+Qt5.5(x86)+VS2010(x86)1 安装MySQL 注意:以下是按x64版本安装的,x86版本...
    99+
    2024-04-02
  • MySQL的安装与配置过程
    这篇文章主要介绍“MySQL的安装与配置过程”,在日常操作中,相信很多人在MySQL的安装与配置过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL的安装与配置过程”...
    99+
    2024-04-02
  • centos7.9安装zabbix5.0.14及配置过程
    目录一、基础环境配置二、安装数据库三、安装zabbix相关组件四、配置Zabbix前端一、基础环境配置 1、关闭firewalld、关闭selinux ##关闭firewall...
    99+
    2024-04-02
  • springboot整合seata的配置过程
    前言: 小编引入的图片和文字描述都是来自于尚硅谷的视频讲解,在此感谢尚硅谷的老师,同时也结合 seata文档官方文档进行整合项目地址(gitee): https://gitee.co...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作