如何从记录器中删除 "Enabling {plugin} {version}" 消息?

How do I remove the "Enabling {plugin} {version}" message from the logger?

有没有办法从 Bukkit 中删除这些消息,以便添加自定义消息?

[{plugin}] Loading {plugin} {version}
[{plugin}] Enabling {plugin} {version}

我想用第 3 到第 5 行替换此图像的第 1 行和第 2 行。

你不能。你需要更改服务器源。

这些消息非常有用。它们帮助用户快速定位错误和许多其他事情。

就因为他们,you should keep the console clean

There is no reason to print a message such as "{$PluginName} has been enabled!" as bukkit will do this automatically.

是的,如果您真的想要,您可以为您的消息过滤 System.out

PrintStream old = System.out;
System.setOut(new PrintStream(old) {
    @Override
    public void print(String s) {
        if (s != null && s.matches(
            ".*?\[NoOpenHopper]\s(Loading|Enabling)\sNoOpenHopper.+" ))
            super.print("NoOpenHopper has been enabled!");
        super.print(s);
    }
});
您可以在插件的构造函数中使用它来确保在您之前执行此过程插件已启用,因此日志消息被有效覆盖。

请确保您首先了解注意事项:

  1. 你一定非常相信自己的过滤技巧。如果您不确定它是否捕获其他任何东西,请不要这样做。 (如果你不知道这个是做什么的,不要偷它,你实际上会用这个破坏很多。)
  2. 这将创建一个新的 PrintStream 对象。除了使用包装对象进行过滤,您还可以使用反射(查看 Proxyunreflect),这样可以更有效地避免将垃圾倾倒到堆中。虽然,AWT 这样做,Sun 这样做,甚至 CraftBukkit 也这样做,所以不用担心。
  3. 这是日志消息的原子擦除,除非您保留对 old 的引用并因此在之后重置 System.setOut(您确实应该这样做,否则您的服务器所有者真的会这样做),否则您无法恢复恨你)。