滚动文件实现

2024-04-28

我一直很好奇滚动文件是如何在日志中实现的。

如何开始用任何语言创建一个文件写入类,以确保不超过文件大小。

我能想到的唯一可能的解决方案是:

write method:
    size = file size + size of string to write
    if(size > limit)
        close the file writer
        open file reader
        read the file
        close file reader
        open file writer (clears the whole file)
        remove the size from the beginning to accommodate for new string to write
        write the new truncated string
    write the string we received

这看起来是一个糟糕的实现,但我想不出更好的方法。

具体来说,我很想看到 java 中的解决方案。

编辑:通过从开头删除大小,假设我有 20 字节字符串(这是限制),我想编写另一个 3 字节字符串,因此我从开头删除 3 个字节,剩下 17 个字节,通过附加新字符串,我有 20 个字节。


因为你的问题让我研究了它,这里有一个例子logback日志记录框架。这RollingfileAppender#rollover()方法如下所示:

public void rollover() {
    synchronized (lock) {
        // Note: This method needs to be synchronized because it needs exclusive
        // access while it closes and then re-opens the target file.
        //
        // make sure to close the hereto active log file! Renaming under windows
        // does not work for open files
        this.closeOutputStream();

        try {
            rollingPolicy.rollover(); // this actually does the renaming of files
        } catch (RolloverFailure rf) {
            addWarn("RolloverFailure occurred. Deferring roll-over.");
            // we failed to roll-over, let us not truncate and risk data loss
            this.append = true;
        }

        try {
            // update the currentlyActiveFile           
            currentlyActiveFile = new File(rollingPolicy.getActiveFileName());

            // This will also close the file. This is OK since multiple
            // close operations are safe.
            // COMMENT MINE this also sets the new OutputStream for the new file
            this.openFile(rollingPolicy.getActiveFileName()); 
        } catch (IOException e) {
            addError("setFile(" + fileName + ", false) call failed.", e);
        }
    }
}

正如您所看到的,逻辑与您发布的非常相似。他们关闭当前OutputStream,执行翻转,然后打开一个新的(openFile())。显然,这一切都是在一个synchronized由于许多线程正在使用记录器,因此会阻塞,但一次只能发生一次翻转。

A RollingPolicy是关于如何执行滚动的策略和TriggeringPolicy是何时执行翻转。和logback,您通常根据文件大小或时间来制定这些策略。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

滚动文件实现 的相关文章

  • java中的csv到pdf文件

    我正在尝试获得一个csv文件解析为pdf 到目前为止我所拥有的内容附在下面 我的问题是这段代码最终出现在 pdf 中的文件在 csv 文件的第一行被截断 我不明白为什么 附示例 本质上我想要一个没有任何操作的 csv 文件的 pdf 版本
  • java.lang.Class: 在 java 程序中初始化 log4j 属性文件时出错

    我正在尝试使用 log4j 运行独立的 java 程序 但在调试时收到以下消息 控制台上没有 log4j 相关日志 log Logger 1343 java lang Class ERROR in 18b4aac2 有人可以建议这里出了什么
  • JTree 节点不会被直观地选择

    不知何故 我无法为我的 JTree 节点启用 选择突出显示 我正在我的项目中使用自定义单元格渲染器 这很可能导致此问题 这是完整的渲染器类代码 protected class ProfessionTreeCellRenderer exten
  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • 场景生成器删除 fxml 文件中的导入

    我使用场景构建器 Gluon Scene Builder JavaFX Scene Builder 8 1 1 来创建应用程序的 UI 并使用 Eclipse 开发 JavaFX 现在 每次我在场景生成器中保存某些内容时 它都会从 fxml
  • 为什么我在 Mac 上看到“java.lang.reflect.InaccessibleObjectException: Unable to make private java.nio.DirectByteBuffer(long,int)accessibl

    我已经在工作中愉快地构建代码好几天了 但突然我的一个项目 不是全部 失败并出现此错误消息 看看下面的答案吧 我是如何修复它的 起初我用谷歌搜索 看到很多有这个问题的人正在使用 Java 16 但我认为 错误 我正在使用 Java 11 因为
  • 使用 Guava 联合两个 ImmutableEnumSets

    我想联合两个ImmutableEnumSets来自番石榴 这是我的尝试 public final class OurColors public enum Colors RED GREEN BLUE YELLOW PINK BLACK pub
  • 打印包含 JBIG2 图像的 PDF

    请推荐一些库 帮助我打印包含 JBIG2 编码图像的 PDF 文件 PDFRenderer PDFBox别帮我 这些库可以打印简单的 PDF 但不能打印包含 JBIG2 图像的 PDF PDFRenderer尝试修复它 根据 PDFRedn
  • 从 Java 日历迁移到 Joda 日期时间

    以前 当我第一次设计股票应用相关软件时 我决定使用java util Date表示股票的日期 时间信息 后来我体会到了大部分方法java util Date已弃用 因此 很快 我重构了所有代码以利用java util Calendar 然而
  • 如何使用 Mockito 和 Junit 模拟 ZonedDateTime

    我需要模拟一个ZonedDateTime ofInstant 方法 我知道SO中有很多建议 但对于我的具体问题 到目前为止我还没有找到任何简单的解决办法 这是我的代码 public ZonedDateTime myMethodToTest
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • 从 Stax XMLStreamReader 读取以解组部分

    我正在使用 Stax 游标 API 从大型 xml 文件中提取数据 当前 我转到特殊标签的开头并使用 JAXB 解组该标签 这对于格式良好的 xml 文件效果很好 但不久前我有一个文档 其中数十万个标签中有一个未关闭 JAXB 使用 XML
  • 我想要一个 Java 阿拉伯语词干分析器

    我正在寻找阿拉伯语的 Java 词干分析器 我找到了一个名为 AraMorph 的库 但它的输出是无法控制的 并且它会形成不需要的单词 还有其他阿拉伯语词干分析器吗 这是新的阿拉伯语词干分析器 Assem 的阿拉伯语轻词干分析器 http
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • 为什么 BufferedWriter 不写入文件?

    我有这个代码 String strings Hi You He They Tetrabenzene Caaorine Calorine File file new File G words txt FileWriter fWriter Bu
  • MongoDB Java 驱动程序:MongoCore 驱动程序与 MongoDB 驱动程序与 MongoDB 异步驱动程序

    MongoDB Java 驱动程序有三种不同的驱动程序选项 核心驱动 MongoDB 驱动程序 MongoDB 异步驱动程序 The 驱动程序描述页面 https docs mongodb org ecosystem drivers jav
  • Java 推断泛型类型

    我正在寻找类似的推断捕获泛型类型的概念 类似于以下方法片段 但不是捕获泛型类型的类 public

随机推荐

  • 结合 codeigniter 和 laravel

    我在用着codeigniter框架 但我想使用的功能laravel像下面的代码这样的框架 我可以打印变量而无需 Hello name 我能怎么做 Codeigniter 是一个 PHP 框架 Laravel 也是 php 框架 而这两者并不
  • 在 JS 中的浏览器中输入 url 时,偏移哈希标签链接以调整固定标头

    我希望创建一个页面 允许哈希标签跳转到页面的某些内容 e g http example com page1 http example com page1是一个普通页面 http example com page1 info http exa
  • 如何在iOS中根据文本长度更改UILabel宽度?

    我想在 UILabel 旁边显示图像 但是 UILabel 的文本长度可变 所以我不知道将图像放置在哪里 图像应根据标签的大小移动 我怎样才能做到这一点 虽然 Keshav 答案可以工作 但它已被弃用 try NSDictionary at
  • 其中 Py_FileSystemDefaultEncoding 在 python 源代码中设置

    我很好奇python源代码如何设置Py FileSystemDefaultEncoding的值 我收到了一件奇怪的事情 自从Pythondoc https docs python org 2 library sys html sys get
  • Django 模型选择不会因无效选择而引发错误

    我在 Django 中有一个带有选择字段的对象 class CustomFieldType models Model STRING STRING DATE DATE BOOLEAN BOOLEAN NUMERIC NUMERIC EMAIL
  • `[$injector:nomod] 模块“google-maps”不可用`

    我正在使用 angular google maps 在角度应用程序中处理谷歌地图 为此 我必须添加angular google maps js到项目 如果我按以下方式添加脚本 该页面可以正常工作 不会出现任何错误 但如果我使用本地副本 它将
  • L"" 和 u8"" 之间的区别

    以下有什么区别吗 auto s1 L 你好 auto s2 u8 你好 Are s1 and s2指的是同一类型 如果不是 有什么区别以及首选哪一个 它们不是同一类型 s2是 UTF 8 或窄字符串文字 这C 11标准草案 http www
  • 多个 tableView 单元格中的多个 collectionView

    我有一个tableView其中我有 2 个自定义单元格 在这两个单元格中我有不同的CollectionView 两者的数据源和委托CollectionViews is my ViewController 那么现在我如何检查哪个Collect
  • Mono 的 DNS 刷新超时

    虽然目前Mono项目的ServicePointManager类有DnsRefreshTimeout属性启用到其接口中 相关属性未实现 调用示例 ServicePointManager DnsRefreshTimeout 10 60 1000
  • 天蓝色媒体服务-请求正文太大并超出最大允许限制

    我正在使用 java SDK 并遵循以下示例 https learn microsoft com en us azure media services media services java how to use https learn m
  • 无需重新计算即可获取字典键哈希

    有没有办法从字典中提取现有的密钥哈希 而无需再次重新计算它们 暴露它们并因此通过哈希而不是密钥访问字典会有什么风险 我认为 Python 的字典对象没有任何公共 API 可以让您查看存储其对象的哈希值 您无法在 Python 代码中直接通过
  • Scala 恢复或recoverWith

    我们公司正在用Scala开发一些系统 我们有一些疑问 我们正在讨论如何映射未来的异常 但我们不知道何时应该使用选项 1 或选项 2 val created Future 选项1 val a created recover case e da
  • 具有运行空间池的 SessionStateProxy 变量

    我想在 PowerShell 中使用运行空间池来执行后台操作 但我需要从主线程访问 WPF 窗口变量 普通运行空间有以下选项 runspace SessionStateProxy SetVariable xamGUI xamGUI 但是我如
  • 内容更改时 DataGridView 样式不更新

    好的 这是我的情况 我有一个DataGridView含有Messages 应用以下样式
  • 计算具有不均匀间隔点的 3D 梯度

    我目前有一个由几百万个不均匀间隔的粒子组成的体积 每个粒子都有一个属性 对于那些好奇的人来说是潜力 我想计算其局部力 加速度 np gradient 仅适用于均匀分布的数据 我在这里查看 numpy 中的二阶梯度 https stackov
  • Python 和 Scipy:如何拟合冯·米塞斯分布?

    我正在尝试拟合来自 scipy 的冯 米塞斯分布 http docs scipy org doc scipy reference generated scipy stats vonmises html http docs scipy org
  • ValueError:无法解释优化器标识符:

    我尝试运行此代码 但出现此错误 请任何人过去也遇到过相同的错误 sgd optimizers SGD lr 0 01 decay 1e 6 momentum 0 9 nesterov True 编译模型 model compile opti
  • IE 中“对象不支持属性或方法‘查找’”

  • 如何在java中将ojalgo稀疏数组存储到文件中?

    我目前有一个 SparseStore 矩阵 我在其中执行大量计数和计算 我想将其存储到文件中 以便以后可以重复使用它 而无需重新执行之前的所有计算 我尝试了 Java 中的基本序列化 ObjectOutputStream outputStr
  • 滚动文件实现

    我一直很好奇滚动文件是如何在日志中实现的 如何开始用任何语言创建一个文件写入类 以确保不超过文件大小 我能想到的唯一可能的解决方案是 write method size file size size of string to write i