Java 记录器控制台流重复输出

2023-12-31

我希望这个问题有一个简单的答案。我正在尝试将记录器添加到我的 Java 应用程序中。我能够完美地格式化日志文件,但在尝试将 ConsoleHandler 添加到记录器以格式化控制台输出时遇到了问题。

添加 ConsoleHandler 后,每条日志消息都不会打印三次,两次使用我想要的正确格式,然后一次使用我不想要的原始格式。

我将在下面发布我的代码,完全不确定我做错了什么。
任何帮助将不胜感激。

// remove and handlers that will be replaced
Handler[] handlers = logger.getHandlers();
for(Handler handler : handlers)
{
    if(handler.getClass() == ConsoleHandler.class || handler.getClass() == FileHandler.class)
        logger.removeHandler(handler);
}

// file handler
FileHandler fh = new FileHandler(file.toString());
fh.setFormatter(new MS2Formatter());
logger.addHandler(fh);

// console handler
ConsoleHandler ch = new ConsoleHandler();
ch.setFormatter(new MS2Formatter());
logger.addHandler(ch);

logger.setLevel(Level.INFO);

EDIT: Answer

只是想在这里发布我的最终代码来帮助任何遇到类似问题的人。

logger = Logger.getLogger("My Logger");     
logger.setUseParentHandlers(false);

// remove and handlers that will be replaced
Handler[] handlers = logger.getHandlers();
for(Handler handler : handlers)
{
        if(handler.getClass() == ConsoleHandler.class)
            logger.removeHandler(handler);
}

// setup the file
File file = new File(location + "/" + fileName);

// file handler
FileHandler fh = new FileHandler(file.toString(), true);
fh.setFormatter(new MS2Formatter());
logger.addHandler(fh);

// console handler
ConsoleHandler ch = new ConsoleHandler();
ch.setFormatter(new MS2Formatter());
logger.addHandler(ch);

// remove and handlers that will be replaced
logger.setLevel(Level.INFO);

您到底需要多少个处理程序?addHandler()将您创建的处理程序添加到与该记录器关联的处理程序中。因此,您拥有默认处理程序,以及您在代码中添加的 2 个处理程序 - FileHandler 和 ConsoleHandler。

您可以使用以下命令获取当前的处理程序集getHandlers()方法及用途removeHandler()删除不需要的处理程序。

EDIT

在您的情况下,很可能正在使用父处理程序。因此,即使您认为要删除处理程序,如果您实际调试代码,您也会发现在 for 循环执行期间您根本没有真正删除处理程序(或者至少不是 ConsoleHandler)。

要防止使用父处理程序,请使用此语句。

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

Java 记录器控制台流重复输出 的相关文章

  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • Java 7 默认语言环境

    我刚刚安装了 jre7 我很惊讶地发现我的默认区域设置现在是 en US 对于jre6 它是de CH 与jre7有什么不同 默认区域设置不再是操作系统之一吗 顺便说一句 我使用的是Windows7 谢谢你的回答 编辑 我已经看到了语言环境
  • Android 中的列表(特别是 RecyclerView 和 CardView)如何工作

    请原谅我问这个问题 但我是 Android 开发新手 尽管我正在尝试了解developer android com 网站上的基础知识 但大多数示例 即使他们说它们是为 Android Studio 构建的 尚未设置为使用 Gradle 因此
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • FileNotFoundException - Struts2 文件上传

    Strange FileNotFoundException使用Struts2上传文件时 这是 JSP 的一部分
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • Spring数据中的本机查询连接

    我有课 Entity public class User Id Long id String name ManyToMany List
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • Java:从集合中获取第一项

    如果我有一个集合 例如Collection
  • 如何通过注解用try-catch包装方法?

    如果应该在方法调用中忽略异常 则可以编写以下内容 public void addEntryIfPresent String key Dto dto try Map
  • Eclipse - 安装新的 JRE (Java SE 8 1.8.0)

    我正在尝试安装 Java 8 到目前为止我所做的 安装最新版本的 Eclipse 下载并安装 Java SE 运行时环境 8http www oracle com technetwork java javase downloads jre8
  • 在 Java 中通过 XSLT 分解 XML

    我需要转换具有嵌套 分层 表单结构的大型 XML 文件
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • 如何在 iOS 中创建多行字符串或多行标签作为 CGPath?

    API支持这个吗 如果没有 我该怎么办 有CTFontCreatePathForGlyph在 Core Text 中 它可以将单个字符转换为路径 我可以在循环中使用它来创建我的字符串作为路径 但我必须处理间距和字偶距以及所有其他令人讨厌的事
  • 调用 didRangeBeacon 时未找到任何信标

    我注册了自己的位置管理器来监视和测距一些信标 self locationManager startMonitoringForRegion region self locationManager startRangingBeaconsInRe
  • 如何让android应用程序始终保持登录状态?

    现在我正在尝试创建一个 Android 应用程序 假设它将是某种 X 概念 所以我正在创建一个登录屏幕 我想做的是 如果我在手机上登录该应用程序 那么每当我尝试访问该应用程序时 它应该始终登录 例如我们手机中的 Facebook G mai
  • 返回前正确,返回后错误

    我已经在谷歌上搜索了几个小时 但没有运气 我正在使用标准c 调用一个非常简单的方法 并返回正确的值 但返回后的值完全错误 call declare the gross and ficaTax variables double gross d
  • 未生成资源文件代码

    我有我的默认资源文件Resources resxVisual Studio 很好地生成了一个designer cs类 但是当我尝试创建Resources de DE resx 它不会生成 我检查了两个文件的所有属性是否相同 它确实生成Res
  • 在 Macintosh 上安装 OpenCV

    我一直在关注这个教程 http blogs wcode org 2014 10 howto install build and use opencv macosx 10 10 http blogs wcode org 2014 10 how
  • PHP 服务器返回的 JSON 数据为空

    我很难弄清楚这个问题 似乎无论我尝试什么 PHP 总是最终返回一个空数组 这是我的主文件 index php 的代码
  • 从 Web 应用程序打印到客户端打印机

    如果我有一台打印机直接连接到 PC 带有打印机的信息亭 我将如何创建网页 net Web 应用程序 将 jpg 打印到信息亭打印机的功能 而无需用户干预 除了单击页面上的按钮 这个问题已经被问过好几次了 结果总是你can t通过普通的网络技
  • Ionic 2 / 3 / 4:如何将标题中的按钮与标题右侧对齐

    如何与右侧对齐 按钮显示在标题左侧 没有撰写图标 这是我正在做的事情
  • Nginx 位置匹配中的变量捕获

    假设我有一个像这样的 URL www example com a b sth 我在 Nginx 配置中编写了一个位置块 location a b
  • C# 中的 3D 数学有什么好的库吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一个工具 它将用于处理一堆 3D 数据 执行诸如旋转对象 平移 缩放和所有这些好东西之类的操
  • 如何向用户询问文件名?

    搜索 FileDialog 的调用 我想向用户询问 Pharo 4 0 中的文件名 通过观察员我找到了班级 FileDialogWindow 用一种方法 answerFileName 寻找 answerFileName 的发件人 我去上课
  • Google Maps API:缩放时 SVG 标记相对于地图移动

    我在地图上创建了两个标记 一个是标准标记 另一个使用 SVG 路径 当我缩小时 标准标记不会相对于地图移动 但 SVG 标记会相对移动 这是一个小提琴 你可以明白我的意思 http jsfiddle net 9A4ET http jsfid
  • 如何使用 Spray Routing 测试自定义 Json 对象

    我正在 mongodb 之上创建一个带有 Spray routing 的 Rest API 以进行一些 CRUD 操作 这一切都工作正常 预计每当我尝试使用 specs2 测试它时 以下规格 class RestServiceSpec ex
  • 使用 MapView 抛出 ClassNotFoundException

    我正在努力寻找这段代码锁定的原因 据我所知 我在清单文件中声明了正确的权限 如下所示 我尝试在实际设备 Droid x w 2 3 3 和 AVD 上运行它 但没有成功 我还附加了 logcat 这使我遇到了 classnotfound 异
  • 如何验证x509证书的签名?

    我有两个 X509Certificate 对象 x1 和 x2 我想验证 x2 是否由 x1 签名 我认为这是通过 x1 的公钥和 x2 的签名来完成的 具体如何做到这一点 我还想知道将 x2 的发行者与 x1 的主题进行逐字节比较并在不同
  • 使用node js按名称过滤

    有什么方法可以过滤具有给定扩展名的文件 然后进一步过滤它们 例如 我有 txt扩展 我想得到我所有的 txt来自数组 file animal bio txt xray pdf fish bio txt mammal doc txt huma
  • PHP DateTime::createFromFormat 不起作用

    DateTime createFromFormat似乎无法正常工作 有谁知道原因和 或如何修复它 鉴于此代码 var dump DateTime createFromFormat m 02 gt format m var dump Date
  • 我什么时候可以安全地使用 HTML5 中的新
    元素?

    12 月 16 日 HTML5 扩展规范
  • Java 记录器控制台流重复输出

    我希望这个问题有一个简单的答案 我正在尝试将记录器添加到我的 Java 应用程序中 我能够完美地格式化日志文件 但在尝试将 ConsoleHandler 添加到记录器以格式化控制台输出时遇到了问题 添加 ConsoleHandler 后 每