我有这些具体要求:
现在,我的实现如下:
final Logger logger = LoggerFactory.getLogger(HelloWorld.class);
final Marker marker = MarkerFactory.getMarker("FATAL");
logger.error(marker, "!!! Fatal World !!!");
这是我的模式布局(在yaml):
PatternLayout:
Pattern: "%d{ISO8601_BASIC} %-5level %marker [%t] %logger{3.} - %msg%n"
以下是我的日志输出:
20150506T155705,158 ERROR FATAL [main] - !!! Fatal World !!!
你知道如何有效地从日志输出中删除“错误”吗?
非常感谢你
我知道问题是针对log4j的。我发现这个页面时,寻找有关回登录。SL4J的建议是:https://www.slf4j.org/faq.html#fatal.
以下是我与一些同事一起提出的最接近实际的解决方案:
以下是Java示例:
Marker fatal = MarkerFactory.getMarker("FATAL");
// Usage example
final Logger logger = LoggerFactory.getLogger(FatalLogger.class);
logger.log(fatal, "this is a fatal message");
// Log sample :
20150514T115144,279 FATAL [main] FatalLogger - this is a fatal message
以下是YAML示例:
Configuration:
status: debug
Appenders:
RandomAccessFile:
- name: APPLICATION_APPENDER
fileName: logs/application.log
PatternLayout:
Pattern: "%d{ISO8601_BASIC} %-5level %msg%n"
- name: FATAL_APPENDER
fileName: logs/application.log
PatternLayout:
Pattern: "%d{ISO8601_BASIC} FATAL %msg%n"
Routing:
name: ROUTING_APPENDER
Routes:
pattern: "$${marker:}"
Route:
- key: FATAL
ref: FATAL_APPENDER
- ref: APPLICATION_APPENDER #DefaultRoute
Loggers:
Root:
level: trace
AppenderRef:
- ref: ROUTING_APPENDER
Marker
并不是您真正想要的<代码>标记用于“丰富”日志消息,使其更易于搜索。您正在尝试更改日志级别/优先级,这有点不同。
您正在使用记录器。error()
将消息记录为错误级别。
如果没有预先定义的
FATAL
级别(通常有,如logger.fatal()
),则使用通用的logger.log()
,它允许您指定日志级别。
logger.fatal(yourMessage);
或者
logger.log(priorityLevel, yourMessage);
来自SLF4J网站:
Marker接口是org.slf4j包的一部分,使得FATAL级别在很大程度上是多余的。如果一个给定的错误需要超出普通错误的关注,只需用一个特别指定的标记标记日志语句,该标记可以命名为“FATAL”或任何其他您喜欢的名称。
http://www.slf4j.org/faq.html#fatal
因此,使用SLF4J,不可能有
FATAL
日志级别。我强烈反对这一决定背后的理由,但事实就是如此。
在我的Java应用程序中,我使用SLF4J+Logback进行日志记录。我在开发环境中使用调试级日志记录,在生产环境中使用错误级日志记录。但是有一些消息我无论如何都想要记录下来,无论日志级别如何(类似于,但使用的是logger)。 有什么切实可行的方法可以实现这一点吗?我可以使用error或更低的级别,但我想做的是给出一些信息,所以在语义上是错误的,它不是错误。 我可以在我的中为我的类定义另一个记
我有一个Keycloak EAR模块,部署在Keycloak 11.0上。在我的EAR模块中,我希望使用带有SLF4J的log4j2日志库。我通过直接在pom中添加以下依赖项成功地完成了这一点:、&。 通过将设置为来排除Wildfly日志记录依赖项。在打包的EAR外部指定,并用系统属性引用。 现在问题来了。我还希望Keycloak使用log4j2,但我无法使其工作。Keycloak使用的是Jbos
我的数据库中没有插入任何内容。所以我的第一个问题是为什么它不工作,请给我任何解决办法,如果可能的话。 另一个问题是,我将的intLevel调整为10,如下所示: 而现在它正在插入数据库,但也抛出了一些错误。 如有任何帮助,我们将不胜感激,并提前向您表示感谢。
在我的项目中,我使用slf4j+log4j进行日志记录。我刚接触java,正在尝试了解日志记录是如何工作的。如果我想使用log4j以外的其他日志框架,比如java.util.logging,那么我就不需要更改任何代码,因为我使用的是SLF4J。我只需要移除log4j的jar,并添加java.util.logging的二进制。我试着了解当我们不改变任何代码时,它是如何工作的。如果问题不清楚,请让我知
我试图从log4j1更改为log4j2。我所做的: 已删除旧配置文件log4j。xml 创建了新的配置文件log4j2。xml 创建了jboss部署结构。xml 编辑的pom 环境:野蝇10 1 EAR 4 WAR文件中没有使用web.xml。以前的log4j配置日志在EAR中(仅) Log4j2配置文件 Jboss部署结构 新的maven依赖关系 我之前说过我在SLF4j中使用log4j1。这些
我目前正在启动一个新的Webapp(在tomcat 6上运行)。我有使用slf4j的组件和使用commons日志的组件。我计划使用log4j 2.0作为日志实现,原因有几个(主要针对Appender:SocketAppender和SyslogAppender,但也因为在不丢失日志事件的情况下升级配置重新加载) 现在我的问题是:-我应该用哪个接口来编程我的新类?loag4j还是slf4j?或者甚至是