【问题标题】:Formatting slf4j to log message types with colors格式化 slf4j 以使用颜色记录消息类型
【发布时间】:2012-09-10 04:38:47
【问题描述】:

我正在使用 slf4j 登录我的 Java 应用程序。它涉及很多日志记录和日志监控。
有时,当整个日志以黑色打印时,很难从日志中读取和查找信息。
只是为了使其更具可读性,是否可以用不同颜色记录不同类型的消息?
例如,红色或不同字体大小的所有错误级别消息以及蓝色和不同字体大小的所有信息级别消息。

欢迎任何建议或帮助。 谢谢。

【问题讨论】:

  • 如果您输入您的 IDE 的名称可能会有所帮助。您可以询问如何将错误消息映射到 Stderr 而不是 Stdout。
  • 日志文件是纯文本文件。没有颜色的概念。但是,您也许可以找到一些可以用来查看日志的东西,可以为您对其进行颜色编码...

标签: java logging slf4j


【解决方案1】:

无法更改slf4j 日志记录的颜色,因为没有格式化程序。 SLF4J 是您的应用程序和某些日志记录工具(例如 Log4j 或 Logback)之间的中间件。

您可以更改 Log4j 输出中的颜色,如 here 所述。我建议使用来自jcabi-logMulticolorLayout

【讨论】:

  • 感谢您的回答,但您的所有建议都是为了在控制台中获得彩色输出。由于我需要从多个系统收集日志文件并对其进行分析,所以我需要对日志文件进行着色。
  • “要着色的日志文件”?嗯... :)
  • @Panshul 将多个日志文件合并到一个尝试 Otros Log Viewer github.com/otros-systems/otroslogviewer。几年来我一直在使用它来组合几个基于 Java 的 Windows 服务的日志。
【解决方案2】:

你必须记住的事情。

首先,SLF4J 只是一个日志外观。如何处理实际的日志消息取决于它使用的绑定。因此你的问题是无效的,相反,你应该引用你想要使用的实现(LogBack?Log4J?等)

其次,“着色”在大多数情况下没有意义。例如,如果您引用纯文本日志文件,我们无法控制颜色,因为它们都是纯文本(除非您的编辑器为您的日志消息格式内置了特殊的语法突出显示)。如果您想在控制台/终端中查看颜色,或者您将日志输出为允许您包含颜色信息的文件格式(例如 HTML),这可能是有意义的。

考虑到这两个想法,这是我的建议。

LogBack 内置支持在控制台输出中为http://logback.qos.ch/manual/layouts.html#coloring 着色。如果您正在寻找在控制台输出中查看颜色的方法,并且您被允许使用 LogBack,那么这就是您正在寻找的。​​p>

【讨论】:

  • 谢谢你的回答,但我使用的是Log4j,我需要从不同的系统收集日志文件并分析它们。所以在控制台中获取彩色输出是没有用的。我需要日志文件中的颜色.. 但感谢您的建议,我会尝试 HTML 输出。
  • 如果您可以编写一个带有颜色的纯文本文件,那么您可以期待。然而,这是无法实现的。您可以编写自己的查看器来分析您的日志消息并进行格式化并显示给您。我敢打赌,如果你愿意这样做。使用 HTML 和一些 CSS 可能是适合您的方式。
【解决方案3】:

我想到了两个解决方案。它们不是颜色,而是替代解决方案:

  1. 在您的 File Appender 配置中,您可以配置模式以包含日志级别(错误、警告等)。然后你可以 grep 文件,按级别过滤消息。

  2. 您可以配置两个具有不同级别阈值的文件附加程序(用于两个单独的日志文件)。例如,一个会将调试级别以上的所有日志(例如 info、warn、error)记录到 logs.txt 中,而另一个只会将错误日志记录到 errors.txt 中

希望对你有帮助。

【讨论】:

    【解决方案4】:

    将下一个 appender 添加到 logback.xml 以对日志输出进行着色:

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <!-- encoders are assigned the type
                 ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
            <encoder>
                <Pattern>%d %highlight(%-5level) [%thread] %cyan(%logger{15}): %msg%n</Pattern>
            </encoder>
    </appender>
    

    【讨论】:

      【解决方案5】:

      我对日志记录级别和包都使用过滤器。这个例子来自Spring boot application.properties

         logging.level.root=warn
         logging.level.org.springframework=warn
         logging.level.org.hibernate=warn
         logging.level.org.starmonkey.brown=DEBUG
      

      这样我只能看到我想看到的消息

      【讨论】:

      • 谢谢!!!这个对我有用!在找到它之前,我在谷歌上搜索了几个小时 org.slf4j.Logger。原来它与spring boot设置有关,与slf4j logger无关。再次感谢!
      猜你喜欢
      • 2011-09-16
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多