gpt4 book ai didi

java - Log4j2 没有正确登录到 graylog 服务器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:54 27 4
gpt4 key购买 nike

现在我正在尝试使用 log4j2 将级别为 INFO 或更高(警告、错误和致命)的所有内容记录到我的服务器我的控制台的级别为INFO。我能够将事情记录到我的控制台,但是,我在将正确的级别正确地记录到服务器时遇到了问题。

到目前为止,这是我尝试过的:

Java

import java.time.Instant;

import org.apache.log4j.PropertyConfigurator;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class App {
private static final Logger log4j = LogManager.getLogger(App.class.getName());

public static void main(String[] args) {
try {
String log4jConfPath = "src/main/resources/log4j2.xml";
PropertyConfigurator.configure(log4jConfPath);
log4j.info("this is a testmessage " + Instant.now().toString());
}
catch (Exception e) {
e.printStackTrace();
}
}
}

XML

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" packages="org.graylog2.log4j2">

<Properties>
<Property name="default_pattern">%d{MM/dd/yyyy hh:mm:ss} %5p %c{1} - %m%n
</Property>
</Properties>

<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${default_pattern}" />
</Console>
<GELF name="gelfAppender" server="graylog.x.something.com"
hostName="some.host" port="12201">
<PatternLayout pattern="%d{dd MMM yyyy HH:mm:ss,SSS} %5p %c{1} - %m%n" />
<KeyValuePair key="extractStacktrace" value="true" />
<KeyValuePair key="addExtendedInformation" value="true" />
<KeyValuePair key="facility" value="gelf-java" />
<KeyValuePair key="environment" value="TEST" />
<KeyValuePair key="application" value="MyApp" />
<KeyValuePair key="additionalFields" value="{'environment': 'TEST', 'application': 'MyAPP'}" />
</GELF>
</Appenders>

<Loggers>
<Root level="error">
<AppenderRef ref="gelfAppender" />
<AppenderRef ref="console" />
</Root>
<Root level="info">
<AppenderRef ref="gelfAppender" />
<AppenderRef ref="console" />

</Root>
</Loggers>
</Configuration>

上面的代码并没有输出我想要的,就是INFO级别的输出到consoleINFO Levels and up输出到服务器

相反,我能够输出:一切(跟踪)到控制台和信息到服务器。

我稍微弄乱了 XML 文件,我注意到当我更改时

status="trace"

status="off"

它仅将 INFO 记录到控制台,但不向服务器记录任何内容。

最后,也可能是最奇怪的事情,如果我删除

Instant.now().toString()

从我的打印语句来看,无论状态如何(如果是 TRACE 或 OFF),都不会向服务器记录任何内容,但它仍会记录到控制台。我以为和我的GELF appender的pattern layout有关,所以我改了

<PatternLayout pattern="%d{dd MMM yyyy HH:mm:ss,SSS} %5p %c{1} - %m%n" />

<PatternLayout pattern="${default_pattern}" />

但这并没有改变输出...

这是我当前的依赖项:

enter image description here

简而言之,我只想将 INFO 级别记录到我的控制台,并将 INFO 级别或更高级别记录到我的服务器。

最佳答案

您似乎已经想到应该使用阈值过滤器来过滤级别为 WARN 的消息从控制台附加程序开始。

为不同的附加程序指定不同级别的正确方法是在 <Appender> 上指定它像这样的元素:

<Loggers>
<Root level="trace">
<Appender ref="console"/>
<Appender ref="file" level="info"/>
</Root>
</Logger>

关于解决您的问题,这里有一个简单的示例程序和输出 INFO 的配置级别消息到控制台,所有日志消息到 everything.logINFO直到 infoAndUp.log

LogTest.java:

public class LogTest {

public static void main(String[] args) {
final Logger log = LogManager.getLogger();

log.trace("This is a trace message");
log.debug("This is a debug message");
log.info("This is an info message");
log.warn("This is a warning message");
log.error("This is an error message");
log.fatal("This is a fatal message");
}
}

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="console">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Filters>
<!-- Exclude messages logged above INFO -->
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
</Console>
<File name="everything" fileName="everything.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
<File name="infoAndUp" fileName="infoAndUp.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="console" level="info"/>
<AppenderRef ref="everything" />
<AppenderRef ref="infoAndUp" level="info"/>
</Root>
</Loggers>
</Configuration>

结果

控制台输出:

09:29:35.331 [main] INFO  LogTest - This is an info message

everything.log:

09:29:35.330 [main] TRACE LogTest - This is a trace message
09:29:35.331 [main] DEBUG LogTest - This is a debug message
09:29:35.331 [main] INFO LogTest - This is an info message
09:29:35.332 [main] WARN LogTest - This is a warning message
09:29:35.332 [main] ERROR LogTest - This is an error message
09:29:35.332 [main] FATAL LogTest - This is a fatal message

infoAndUp.log:

09:29:35.331 [main] INFO  LogTest - This is an info message
09:29:35.332 [main] WARN LogTest - This is a warning message
09:29:35.332 [main] ERROR LogTest - This is an error message
09:29:35.332 [main] FATAL LogTest - This is a fatal message

您应该能够以此为基础修复您自己的配置。

关于java - Log4j2 没有正确登录到 graylog 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40142614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com