在 java 程序中,我使用log4j2作为我的(调试)输出。当使用第三方库时,我想禁用这些库的日志输出。我怎样才能做到这一点?
实际上这对我来说似乎很简单,但我找不到解决方案。我不可能是唯一一个在寻找这个的人吧?
我有一个java应用程序,在其中实现了日志记录。这是文件
log4j2.xml
<configuration xmlns:xi="http://www.w3.org/2001/XInclude" status="WARN">
<xi:include href="log4j-xinclude-appenders.xml" />
<xi:include href="log4j-xinclude-loggers.xml" />
</configuration>
Run Code Online (Sandbox Code Playgroud)
log4j-xinclude-appenders.xml
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<Routing name="RoutingAppender">
<Routes pattern="${ctx:logFileName}">
<Route>
<RollingFile name="Rolling-${ctx:logFileName}"
fileName="logs/${ctx:logFileName}.log"
filePattern="logs/${ctx:logFileName}-%d{MM-dd-yyyy}-%i.log">
<PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %c{36} %l: %msg%n"/>
<SizeBasedTriggeringPolicy size="5 MB" />
<DefaultRolloverStrategy min="1" max="4" />
</RollingFile>
</Route>
<Route ref="Console" key="${ctx:logFileName}"/>
</Routes>
</Routing>
</appenders>
Run Code Online (Sandbox Code Playgroud)
log4j-xinclude-loggers.xml:
<loggers>
<root level="warn">
<appender-ref ref="Console" />
</root>
<logger name="abc.def.ghi.regulators" level="info" additivity="false">
<appender-ref ref="RoutingAppender" />
</logger>
<logger name="org.apache" level="info" />
<logger name="org.springframework" level="info" …Run Code Online (Sandbox Code Playgroud) 在 mule esb 中,当我拖动记录器组件时,我可以看到有 5 个日志级别:
调试、错误、信息、跟踪和警告。这5个有什么区别,什么时候用什么?
提前致谢
我正在使用 lombok 的 log4j2 记录器,我需要根据 ThreadContext 映射配置路由附加程序。路由键由脚本确定。这是整个 log4j2.xml 配置文件:
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%highlight{%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %c{1}: %msg%n%throwable}"/>
</Console>
<RollingFile name="GeneralRollingFile" filename="log/test-log.log"
filepattern="log/test-log-%d{yyyy-MM-dd HH:mm:ss}.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %c{1}: %msg%n%throwable"/>
<Policies>
<SizeBasedTriggeringPolicy size="25 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
<Routing name="Routing">
<Routes>
<Script name="RoutingInit" language="JavaScript">
<![CDATA[
if (logEvent.getContextMap().containsKey("operation-1")) {
return "operation-1";
} else if (logEvent.getContextMap().containsKey("operation-2")) {
return "operation-2";
} else {
return "general";
}
]]>
</Script>
<Route key="general" ref="GeneralRollingFile"/>
<Route key="operation-1">
<RollingFile name="operation-1-rolling"
fileName="log/operation-1/${ctx:operation-1}.log"
filePattern="log/operation-1/${ctx:operation-1}-%d{yyyy-MM-dd HH:mm:ss}.log">
<PatternLayout pattern="%d{yyyy-MM-dd …Run Code Online (Sandbox Code Playgroud) 我需要在 log4js 日志中包含 PID。我看到很多使用线程上下文的例子。但是,这些需要在创建的每个单独线程上进行设置。我被迫不这样做。
我需要一个解决方案,要么不使用线程上下文,要么可以在所有线程上下文上为可能从任何任意类创建的任何线程设置 PID。
我正在使用 log4j-core-2.5 进行日志记录,并且我想在日志记录队列已满时丢弃项目。我确定可以通过使用 log4j 中的 log4j2.asyncQueueFullPolicy 配置属性来应用此功能。
有人可以帮助我如何在我的应用程序中应用此配置吗?
我正在使用这样的文件配置......
Configurator.initialize("", "log4j-node.xml");
Run Code Online (Sandbox Code Playgroud)
我的配置文件看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{dd-MMM HH:mm:ss.SSS} %logger{1}.%t %-5level] %msg%n"/>
</Console>
<RollingFile name="DefaultFile" fileName="../logs/app.log"
filePattern="../logs/app-%d{MM-dd-yyyy}-%i.log" bufferedIO="true" bufferedSize="32000" immediateFlush="false">
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
...
</RollingFile>
<Async name="AsyncFile">
<AppenderRef ref="DefaultFile"/>
<LinkedTransferQueue/>
</Async>
<Async name="AsyncConsole">
<AppenderRef ref="Console"/>
<LinkedTransferQueue/>
</Async>
</Appenders>
<logger name="org.hibernate">
<level value="debug" />
</logger>
<Loggers>
<Root level="TRACE">
<AppenderRef ref="AsyncConsole"/>
<AppenderRef ref="AsyncFile"/>
</Root>
<Logger name="org.hibernate.SQL" level="error" />
<!-- Log all JDBC …Run Code Online (Sandbox Code Playgroud) 当我运行 jar 文件时,出现以下错误:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Run Code Online (Sandbox Code Playgroud)
问题是我没有使用 slf4j,我使用的是 log4j2。它由依赖项使用。Maven 正确地将 org.slf4j:slf4j-api 包含为我正在使用的库的传递依赖项。
我该如何摆脱这个警告?我什至不想记录这种依赖关系的问题。
指的是这个
如何添加微秒级日志记录,如何为此创建自定义模式格式化程序?
我也尝试过 log4j2,但它最终给出了
12:42:05,972803200 [main] DEBUG Log4j2Test - Debug Message Logged !!!
12:42:05,975803200 [main] INFO Log4j2Test - Info Message Logged !!!
12:42:05,975803200 [main] ERROR Log4j2Test - Error Message Logged !!!
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它总是给出 803200 微秒和纳秒。
我的 log4j2.xml 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{ABSOLUTE_NANOS} [%t] %-5level %logger{36} - %msg%n"/>
<!-- <PatternLayout
pattern="[%-5level] %d{ABSOLUTE_NANOS} [%t] %c{1} - %msg%n" /> -->
</Console>
</Appenders>
<Loggers>
<Root level="debug" additivity="false">
<AppenderRef ref="console" />
</Root>
</Loggers>
Run Code Online (Sandbox Code Playgroud)
我正在尝试通过 java 中的电子邮件发送严重性为“错误”的日志条目。在我的 log4j2.xml 文件中,我有以下 SMTP 附加程序:
<SMTP>
name="Mail"
subject="Error Log"
to="receiver@domain.com"
from="sender@domain.com"
smtpHost="SMTP-Host"
smtpPort="587"
smtpPassword="[password]"
smtpUsername="email@domain.com"
smtpDebug="true"
ignoreExceptions="false"
bufferSize="4"
smtpProtocol="smtp">
</SMTP>
Run Code Online (Sandbox Code Playgroud)
但是当我运行我的程序(其中包含一个主要记录字符串)时,会发生以下错误:
DEBUG: setDebug: JavaMail version 1.4.7
13:13:44.469 [main] ERROR Main - Test Error
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "SMTP-Host", port 587, isSSL false
220 SMTP-Host ESMTP Postfix (Debian/GNU)
DEBUG SMTP: connected to host "SMTP-Host", port: 587
EHLO MAXPC
250-SMTP-Host
250-PIPELINING …Run Code Online (Sandbox Code Playgroud) 我通过以下方式在 SLF4J 和 Log4j 中使用标记
final Marker marker = MarkerFactory.getMarker("boom");
logger.info(marker, "BLAH BLAH: {}", stuff);
Run Code Online (Sandbox Code Playgroud)
如何在输出的日志消息中包含标记。例如,我希望上面的代码输出如下内容:
INFO - (boom): BLAH BLAH: something
Run Code Online (Sandbox Code Playgroud)
目前标记未显示
INFO: BLAH BLAH: something
Run Code Online (Sandbox Code Playgroud)
我一直在尝试找到一种在 log4j.properties 中配置此功能的方法,但无法找到有关显示标记的任何信息。