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

使用log4j将错误记录到stderr并进行调试,将信息记录到stdout

欧阳飞
2023-03-14
问题内容

我想使用apache
log4j将日志记录添加到正在开发的应用程序中。在这一点上,我想将所有级别为INFO和更低级别(TRACE,DEBUG)的日志消息重定向到stdout,并将所有其他日志消息从WARN及更高版本(ERROR,FATAL)重定向到stderr。例如:

...
logger.info("Processing at some point"); // must be written to stdout
logger.debug("Point x was processed"); // must be written to stdout
logger.warn("Incorrect point config"); // must be written only to stderr
logger.error("Exception occurred at point x"); // must be written only to stderr

那么我的log4j.properties文件应该是什么?这是如何看待这一时刻的:

log4j.rootLogger=DEBUG, stdout, stderr

# configure stdout
# set the conversion pattern of stdout
# Print the date in ISO 8601 format
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold = DEBUG
log4j.appender.stdout.Target   = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n

# configure stderr
# set the conversion pattern of stdout
# Print the date in ISO 8601 format
log4j.appender.stderr = org.apache.log4j.ConsoleAppender
log4j.appender.stderr.Threshold = WARN
log4j.appender.stderr.Target   = System.err
log4j.appender.stderr.layout = org.apache.log4j.PatternLayout
log4j.appender.stderr.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n

上面配置的问题是logger.error()…也被打印在stdout上。


问题答案:

Per Jon Skeet在Post上的先前文章

不幸的是,没有 最大 阈值,因此无论您在哪里收到调试消息,都会收到警告消息。IMO,这有点痛苦。



 类似资料:
  • 我正在用Soundpool开发一个Android应用程序。每次播放声音时,都会在LogCat中记录一个错误,类型为:E/SoundPool(11873):sampleid=33,leftvolume=0.779528,rightvolume=0.779528,priority=1,loop=0,rate=1.000000 这个错误是什么意思?有可能禁用这些日志吗?我想记录这些错误是相当耗时的,因为

  • 问题内容: 我正在使用以下命令将Python异常消息打印到日志文件中: 除了异常字符串以外,是否可以打印有关异常及其生成代码的更多详细信息?行号或堆栈跟踪之类的东西会很棒。 问题答案: 将在错误消息旁边输出堆栈跟踪。 例如: 输出: @Paulo Check指出:“请注意,在Python3中,您必须在零件内部调用该方法。如果在任意位置调用此方法,则可能会遇到奇怪的异常。文档对此有所提示。”

  • 问题内容: 我正在使用的Web应用程序偶尔会为某些用户带来数据完整性问题。我想打开跟踪级别的日志记录,但是由于我们每秒要处理100个请求,因此每个日志记录都是不可能的。 log4j是否可以有条件地记录日志?换句话说,我希望仅在特定用户发出请求时才能获得跟踪日志。由于我事先不知道哪些用户会受到影响,因此我无法简单地临时对用户名进行硬编码。 编辑: 我想我需要更清楚一点。我可以轻松地在日志语句中添加条

  • 我正在使用docx4j从一个模板创建一些docx文件。但是在生成它的时候,它一直在生成一些烦人的日志。 这是我的log4j.properties文件

  • 起初,我希望用一个控制台滑过。log();在ui中,但正如我所怀疑的,我不认为我们的日志记录,即使ui是一个服务,也会捕捉到它。 我正在搜索,没有找到这样做的方法,可能缺少像ngx logger这样的npm库,但不清楚这是否有效,或者只是为了这个明确的目的创建了一个完整的新endpoint,所以我想先问: 我需要从Angular(9,如果有区别的话)中的按钮点击发送一些信息到Java,以便在记录器

  • 问题内容: 我已经将一个Web应用程序部署到服务器上。我的应用程序使用和。但是,并非所有日志记录消息都已写入文件。 在我的课堂上,我有: 我的文件在本地计算机上运行良好,并且已正确部署。 我看到正在写入的应用程序生成的错误消息没有写入我的。由于输出模式的格式与我的模式不同,因此看起来的日志消息来自其他日志框架。我在中看到的日志记录如下: 我的log4j模式是这样的: 一些日志记录出现在我的文件日志