当前位置: 首页 > 面试题库 >

使Log4j控制台附加程序对不同的线程使用不同的颜色

曹智
2023-03-14
问题内容

我正在跟踪一些并发问题,在登录到控制台时,使每个线程的输出行具有不同的颜色将非常有帮助。我在OS
X上。是否可以使用转换模式输出一些控制代码来完成此操作,或者需要自定义附加程序?有人知道吗?

2011-10-21 12:14:42,859 ["http-bio-8080"-exec-9] DEBUG ...
2011-10-21 12:14:43,198 ["http-bio-8080"-exec-10] DEBUG ...

exec-9和exec-10的行应使用不同的颜色。


问题答案:

您可以扩展PatternLayout和覆盖format(ILoggingEvent)。您可以在那里查看LoggingEvent.getThreadName()基于线程名称的颜色(奇/偶,也许?)。

为了将颜色输出到控制台,您需要使用ANSI Escape
Sequence

例如,要输出红色文本:

  "\u001b["  // Prefix - see [1]
+ "0"        // Brightness
+ ";"        // Separator
+ "31"       // Red foreground
+ "m"        // Suffix
+ text       // the text to output
+ "\u001b[m " // Prefix + Suffix to reset color

这里有一些例子:

  • ColoredPatternLayout 由Ingo Thon实施。
  • 使用Log4J博客文章进行颜色编码的控制台日志记录。

只需添加一下,也许您也可以通过在MDC中设置带有随机ANSI颜色代码的变量“ randColor”(例如在中)Filter,并
在log4j的控制台附加程序配置conversionPattern的标准org.apache.log4j.PatternLayout中使用它来实现此目的:

<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
               value="\u001b[0;%X{randColor}m ....... \u001b[m" />
    </layout>
</appender>


 类似资料:
  • 问题内容: 嗨,我刚刚下载并配置了log4j-2。我一直坚持将颜色代码应用于控制台附加程序。我的控制台附加程序如下所示。 我有两个问题, 我是log4j的新手,这是编写xml配置文件的正确方法吗? 如何在每个日志级别添加两个颜色代码? 例如:DEBUG = green->将输出浅绿色字体,但是我需要它是和 问题答案: 我想我找到了解决方案。我下载了log4j2-core- sources.jar并

  • 我想在WebLogic web控制台上为不同的环境使用不同的颜色。例如,我想用红色表示生产域,用绿色表示开发域,等等。 甲骨文称之为“重塑品牌”。我遵循了这个复杂的指令,但它对我不起作用。可能是因为我的WebLogic版本更新了。 我也遵循了这个和那个文档,但它们也不适用于我。 有没有办法改变web控制台的颜色?

  • 我想根据不同的模块登录不同的应用程序... 我有3个附件:控制台,一个用于记录控制器和服务的滚动文件,另一个用于记录作业中的某些内容的滚动文件。我只想为其滚动文件记录作业的代码,并只使用另一个滚动文件记录控制器和服务。 这是我的grails log4j配置: 使用此配置,日志将写入两个滚动文件和标准输出。如果从根目录中删除滚动附加器,滚动文件将保持为空,即使为文件组指定了附加器。 有人建议将日志分

  • 我有一个基于java的web应用程序的kafka生产者,可以将消息推送到kafka。根据文档,我可以看到kafka生产者是线程安全的。这是否意味着我可以拥有Kafka生产者的单个实例,并由不同的线程(web请求)使用,在我的情况下,每个线程都将打开和关闭生产者。这会产生任何问题吗?还是根据请求启动生产者更好?

  • 我正在使用log4j2记录应用程序的事件。然而,我被以下问题所困扰。 当前,所有日志记录消息都被写入到两个不同的附加程序中。一个具有RollingFile类型,而另一个具有Console类型。 编辑: 我看到很多问题,要求只将某个级别的消息写入文件,而将不同级别的消息写入不同文件。在我的情况下,我需要将具有一定级别的更高的消息写入到不同的文件中。例如,在我提供的情况下,带有级别错误或致命的消息将同

  • 我正在构建一个具有多种不同风格的应用程序。我的问题是,如果我为基于flavor的活动使用不同的代码,我是否需要在所有flavor directores中包含该代码的副本,或者如果我只将代码副本保留在app/src/main/java目录中,如果我不将其包含在flavor目录中,其他所有flavor是否会使用main/java中的文件。 我有 app/src/main/java/com/mycomp