- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
现在我正在尝试使用 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级别的输出到console和INFO 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}" />
但这并没有改变输出...
这是我当前的依赖项:
简而言之,我只想将 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
您应该能够以此为基础修复您自己的配置。
关于java - Log4j2 没有正确登录到 graylog 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40142614/
这个问题已经有答案了: How to do case insensitive string comparison? (23 个回答) 已关闭 3 年前。 用户在我的输入栏中写入“足球”,然后执行第 6
啊,不习惯 javascript 中的字符串。 character_id= + id + correct= + correctOrIncorrect 这就是我需要制作成字符串的内容。如果您无法猜测字符
$(function() { var base_price = 0; CalculatePrice(); $(".math1").on('change', function(e) { Calc
我找不到任何文章回答问题:将Spinnaker部署到Spinnaker将管理的同一Kubernetes集群是否安全/正确?我主要是指生产,HA部署。 最佳答案 我认为Spinnaker和Kuberne
我正在使用MSVC在Windows上从源代码(官方源代码发布,而不是从仓库中)构建Qt5(Qt 5.15.0)。 我正在设置环境。变量,依赖项等,然后运行具有1600万个选项的configure,最后
我需要打印一个包含重复单词的数组。我的数组已经可以工作,但我不知道如何正确计算单词数。我已经知道,当我的索引计数器 (i) 为 49 时,并且当 (i) 想要计数到 50 时,我会收到错误,但我不知道
我正在遵循一个指南,该指南允许 Google map 屏幕根据屏幕尺寸禁用滚动。我唯一挣扎的部分是编写一个代码,当我手动调整屏幕大小时动态更改 True/False 值。 这是我按照说明操作的网站,但
我有一个类“FileButton”。它的目的是将文件链接到 JButton,FileButton 继承自 JButton。子类继承自此以使用链接到按钮的文件做有用的事情。 JingleCardButt
我的 friend 数组只返回一个数字而不是所有数字。 ($myfriends = 3) 应该是…… ($myfriends = 3 5 7 8 9 12). 如果我让它进入 while 循环……整个
这个问题在这里已经有了答案: Is there a workaround to make CSS classes with names that start with numbers valid?
我正在制作一个 JavaScript 函数,当调整窗口大小时,它会自动将 div 的大小调整为与窗口相同的宽度/高度。 该功能非常基本,但我注意到在调整窗口大小时出现明显的“绘制”滞后。在 JS fi
此问题的基本视觉效果可在 http://sevenx.de/demo/bootstrap-carousel/inc.carousel/tabbed-slider.html 获得。 - 如果你想看一看。
我明白,如果我想从函数返回一个字符串文字或一个数组,我应该将其声明为静态的,这样当被调用的函数被返回时,内容就不会“消亡”。 但我的问题是,当我在函数内部使用 malloc 分配内存时会怎样? 在下面
在 mySQL 数据库中存储 true/false/1/0 值最合适(读取数据消耗最少)的数据字段是什么? 我以前使用过一个字符长的 tinyint,但我不确定它是否是最佳解决方案? 谢谢! 最佳答案
我想一次读取并处理CSV文件第一行中的条目(例如打印)。我假设使用Unix风格的\n换行符,没有条目长度超过255个字符,并且(现在)在EOF之前有一个换行符。这意味着它是fgets()后跟strto
所以,我们都知道 -1 > 2u == true 的 C/C++ 有符号/无符号比较规则,并且我有一种情况,我想有效地实现“正确”比较。 我的问题是,考虑到人们熟悉的尽可能多的架构,哪种方法更有效。显
**摘要:**文章的标题看似自相矛盾。 本文分享自华为云社区《Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序》,作者: Jerry Wang 。 文章的标题看似自相矛盾,然而我在“正
我有一个数据框,看起来像: dataDemo % mutate_each(funs(ifelse(. == '.', REF, as.character(.))), -POS) # POS REF
有人可以帮助我使用 VBScript 重新格式化/正确格式化带分隔符的文本文件吗? 我有一个文本文件 ^分界如下: AGREE^NAME^ADD1^ADD2^ADD3^ADD4^PCODE^BAL^A
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!