现在,我正在尝试使用log4j2将具有I NFO或更高级别的所有内容(警告,错误和严重)记录到服务器上,并将具有INFO级别的所有内容记录到控制台上。我能够将内容记录到控制台,但是,在正确地将正确级别记录到服务器时遇到了问题。
到目前为止,这是我尝试过的:
爪哇
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级别输出到控制台,将INFO级别输出到服务器。
相反,我可以输出:控制台的所有内容(跟踪)和服务器的信息。
我把XML文件弄乱了,我注意到当我更改时
status="trace"
至
status="off"
它仅将INFO记录到控制台,而不记录到服务器。
最后,可能是最奇怪的事情,如果我删除
Instant.now().toString()
从我的打印语句中,无论状态如何(无论是TRACE还是OFF),什么都不会记录到服务器,但仍会记录到控制台。我以为这与我的GELF附加程序的图案布局有关,所以我改变了
<PatternLayout pattern="%d{dd MMM yyyy HH:mm:ss,SSS} %5p %c{1} - %m%n" />
至
<PatternLayout pattern="${default_pattern}" />
但这并没有改变输出...
这是我当前的依赖项:
简而言之,我只想将INFO级别记录到控制台,并将INFO或更高级别记录到服务器。
如您所知,您应该使用阈值过滤器WARN
从控制台附加程序中过滤级别和更高级别的消息。
为不同的附加程序指定不同级别的正确方法是在这样的<Appender>
元素上进行指定:
<Loggers>
<Root level="trace">
<Appender ref="console"/>
<Appender ref="file" level="info"/>
</Root>
</Logger>
至于解决您的问题,这里有一个简单的例子程序和配置输出INFO
级消息控制台,所有日志消息everything.log和INFO
和高达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
您应该能够以此为基础来修复自己的配置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句