【问题标题】:Filter System.out.println messages in journalctl by Error, Warn, Info按错误、警告、信息过滤 journalctl 中的 System.out.println 消息
【发布时间】:2022-11-02 20:11:40
【问题描述】:

我如何过滤由 Systemd 控制的 Java 中的消息?

目前我在 System.out.println 中写日志是这样的:

System.out.println("Hello this is a Error");

Journalctl -b -u test.service 给了我这个:

Nov 02 11:58:41 test java[10]: Hello this is a Error

我想做这样的事情:

System.out.println("你好,这是一个错误", "Warn");

得到这个:

Nov 02 11:58:41 test java[10] [Error]: Hello this is a Error

但我不想使用 Log4j 或其他库 :) 也许我只是不知道要搜索什么,找不到解决方案。希望有人有想法。

【问题讨论】:

  • 但我不想使用 Log4j 或其他库:)但你不应该不是想要,因为这就是日志记录的方式。如果您使用正确的库,它甚至可以在需要时与系统日志交互

标签: java logging message systemd


【解决方案1】:

系统错误

我怀疑你想要一些非常简单的东西,所以你可以尝试通过System.err 访问的错误输出流。它可以像您已经熟悉的标准输出流System.out 一样使用非常匹配。

您可以创建自己的消息模式并使用printf() 应用它们(有关字符串格式化的更多信息,请参阅 Oracle 提供的official tutorial)。

System.err.println("message");
        
System.err.printf(LocalDate.now() + " : %s", "message");

该消息将打印在控制台上,以红色突出显示。而已。

Java 日志记录 API

如果您想要更详细的内容,Java 有一个内置的日志记录 API (无需外部依赖)。它位于java.util.logging (这就是为什么它简称为JUL) 并提供许多功能和许多工具,包括记录器、处理程序、过滤器、格式化程序等。您可以了解更多关于它的信息here

这是一个非常愚蠢的例子:

Logger logger = Logger.getLogger("myLogger");
logger.log(Level.WARNING, "something is wrong");

也就是说,如果您决定使用 JUL,您至少需要了解它的缺点以及为什么存在其他日志记录工具。

例如,您可以阅读以下问题:

Why not use java.util.logging?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多