log4j 相关问题

log4j是一种流行的基于Java的日志记录实用程序。它是Apache Software Foundation的一个项目,并根据Apache软件许可证2.0版获得许可

log4j 1.2.12 依赖项显示在编译日志中,但不在 mvn 依赖关系树中

我正在尝试编译该产品,它下载了 log4j 1.2.12 版本。 当我尝试查看如何使用 mvn dependency:tree 添加它时,它没有显示。 在编译日志中,它说如下: [...

回答 1 投票 0

即使 StaticLoggerBinder 位于 Maven-Rep 中,也无法加载类 org.slf4j.impl.StaticLoggerBinder

我正在尝试使用 slf4j-Logger-Functions 但总是遇到相同的错误: SLF4J:无法加载类“org.slf4j.impl.StaticLoggerBinder”。 SLF4J:默认为无操作(NOP)日志...

回答 3 投票 0

log4j2 - Syslog 附加程序和 PatternLayout

我需要将事件记录到系统日志中。 我使用 lo4j2 和 syslog 附加程序。 log4j2.xml 中的附加程序块如下所示: 我需要将事件记录到系统日志中。 我使用 lo4j2 和 syslog 附加程序。 我的 log4j2.xml 中的附加程序块看起来像这样: <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <Syslog name="syslog" host="localhost" port="514" protocol="UDP" charset="ISO-8859-1"> </Syslog> <RollingFile name="AppLog" fileName="/var/log/app.log" filePattern="/var/log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> <Policies> <TimeBasedTriggeringPolicy/> </Policies> </RollingFile> </appenders> 如您所见,我有一个具有特定 PatternLayout 的 Console Appender 和 RollingFile Appender。 我想对 Syslog 附加程序使用相同的 PatternLayout。 但是,系统日志中的日志消息似乎始终使用预定义的布局。 我尝试执行以下操作: <Syslog name="syslog" host="localhost" port="514" protocol="UDP" charset="ISO-8859-1"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Syslog> 但这没有任何效果。系统日志消息仍然具有相同的预定义格式。 如何确定进入系统日志的日志消息的格式? 正如本 log4j2 bug 报告中提到的,log4j2 的开发人员将 SyslogAppender 编码为 SocketAppender 硬连线到 SyslogLayout 因为它旨在符合原始系统日志格式或 RFC 5424。不应允许任何其他布局。 不幸的是,他们没有意识到 RFC 5424 规范并未对日志中包含的消息强制执行任何特定格式,在 Log4j2 实现中仅是日志的 %m 部分。 为了解决这个问题,一个解决方案(在同一个错误报告中建议)是在 SocketAppender 内使用 PatternLayout 重现 syslog 格式,就像这样 <Socket name="SYSLOG" host="localhost" port="514" protocol="UDP"> <PatternLayout pattern="&lt;1&gt;%d{MMM dd HH:mm:ss} ${hostName} appName: { &quot;host&quot;:&quot;${hostName}&quot;, &quot;thread&quot;:&quot;%t&quot;, &quot;level&quot;:&quot;%p&quot;, &quot;logger&quot;:&quot;%c{1}&quot;, &quot;line&quot;:%L, &quot;message&quot;:&quot;%enc{%m}&quot;, &quot;exception&quot;:&quot;%exception&quot; }%n" /> </Socket> 这将通过 UDP 将格式良好的 RFC5424 日志写入本地 514 端口。以下是示例日志输出: Sep 14 10:40:50 app-hostname app-name: { "host":"host-name-01", "thread":"http-nio-8080-exec-4", "level":"DEBUG", "logger":"ExecuteTimeInterceptor", "line":52, "message":"GET &#x2F;health 200 served in 3", "exception":"" } 我不相信您可以在基本 Syslog 附加程序上使用模式。 从文档中可以看出 “SyslogAppender 是一个 SocketAppender,它将其输出写入由主机和端口指定的远程目标,格式符合 BSD Syslog 格式或 RFC 5424” http://logging.apache.org/log4j/2.x/manual/appenders.html#SyslogAppender 但是,它确实允许您指定“format = RFC 5424” 如果您使用 RFC 5424 然后你可以在loggerFields参数中放置一个PatterLayout。 请参阅http://logging.apache.org/log4j/2.x/manual/layouts.html#RFC5424Layout 希望有帮助! 您可以使用 LoggerFields 标签向 RFC5424 格式的 SyslogAppender 消息添加其他元素,如下所示: <LoggerFields> <KeyValuePair key="thread" value="%t"/> <KeyValuePair key="priority" value="%p"/> <KeyValuePair key="category" value="%c"/> <KeyValuePair key="exception" value="%ex"/> </LoggerFields> 然后我使用 rsyslog 的 RFC5424 解析模块 mmpstrucdata 将它们拉出,以创建 json 树。用于访问它们的 rsyslog.conf 模板如下所示: template(name="jsondump" type="string" string="'%$!rfc5424-sd!mdc@18060!thread%', '%$!rfc5424-sd!mdc@18060!priority%', '%$!rfc5424-sd!mdc@18060!category%', '%$!rfc5424-sd!mdc@18060!exception%'") 我只是想做同样的事情,并认为我会分享对我有用的东西。 - 萨姆 您可以使用 SocketAppender 和 PatternLayout 来格式化 syslog (syslog-ng) 消息。 为了使用固定设施支持动态严重性(例如:“用户级消息” - 请参阅RFC5424),模式应如下所示: <Socket name="SYSLOG" host="${env:INTERFACE}" port="514" protocol="UDP"> <PatternLayout pattern="&lt;%level{TRACE=15, DEBUG=15, INFO=14, WARN=12, ERROR=11, Fatal=11}&gt;%replace{${env:APPLICATION_NAME}}{\r}{}[%X{PID}] %t(%T) %c{10} - %m%n"/> </Socket> 要计算设施“用户级消息”和严重性“信息消息”的优先级值 (PRIVAL) - 请参阅 RFC5424 - 以下示例可能有所帮助: Syslog: Facility | Severity Numerical Code: 1 6 Bin: 0 0 0 0 1 | 1 1 0 Dec: 8 + 6 = 14 log4j2syslog-ngsocketappenderpatternlayout 我使用butcher82发布的配置,但必须对其进行一些更改才能产生我需要的结果。 我最终得到的是一条具有正确优先级、时间戳(几天前没有前导零)、主机和消息部分的消息。 syslog 和 log4J 级别之间的映射按照 org.apache.log4j.Level 中的定义使用,并且设施设置为 1(用户级消息),以简化优先级计算。 此模式应与 RFC-3164 兼容: <Socket name="SysLogAppender" host="localhost" port="514" protocol="UDP"> <PatternLayout pattern="&lt;%level{TRACE=7, DEBUG=7, INFO=6, WARN=4, ERROR=3, Fatal=0}&gt;%d{MMM d hh:mm:ss} ${hostName} %m%n"/> </Socket> 以下是生成的输出: <3>Dec 15 09:59:16 foo.bar.hostname this is a test message 注意: 可以在主机名后添加应用程序名称或 pid。

回答 5 投票 0

如何正确关闭 Log4j,关闭所有 Appender,从而关闭文件

我的基于 servlet 的 Web 应用程序有时在重新部署时无法关闭 Log4j 日志文件,导致文件描述符泄漏,并且偶尔会导致包含 servlet 的程序因“打开文件过多”而死亡...

回答 2 投票 0

Log4j 单例包装器的好处?

我最近继承了一些Java代码,需要将其集成到我正在开发的项目中。我的项目是一个处理和转换 XML 消息的服务代理。在寻找的同时...

回答 4 投票 0

如果我执行“作为 Java 应用程序运行”,则会出现错误 -“ERROR StatusLogger Log4j2”

如果我使用“作为 Java 应用程序运行”运行我的测试/java 类,则会出现以下错误 - “错误 StatusLogger Log4j2 找不到日志记录实现。请将 log4j-core 添加到

回答 1 投票 0

如何在Java Web应用程序中生成带有数值的JSON日志?

我需要为 Spring Boot 应用程序添加 JSON 日志,该应用程序配置为使用 SLF4J 和 Log4j2 进行日志记录。除了常规日志事件属性(如消息、日志记录级别、时间戳等)

回答 1 投票 0

log4j 警告:找不到记录器的附加程序(org.apache.kafka.clients. Producer.ProducerConfig)

我正在编写一段代码,尝试使用 kafka 和 SBT 生成消息。它可以编译,但是当使用 SBT 运行时,出现此错误。 log4j:WARN 找不到记录器 (org.apache.

回答 1 投票 0

Spring Boot 跟踪执行器正在记录出站请求中包含密码的 HTTP 正文

MultiValueMapmap = new LinkedMultiValueMap(); map.set("用户名", "user1"); map.set("密码", "通过...

回答 1 投票 0

如何查找log4j桥中缺少哪些log4j类

我正在开发一个项目,该项目使用大量使用 log4j 的遗留库。我想知道 log4j 的所有类都在桥中支持(无操作类很好,我最关心的是......

回答 1 投票 0

异步任务日志中TraceId和Span为空

我在 springboot 中有一个 REST 端点,它使用 CompleteableFuture 调用外部 api 异步多个。在Completeablefuture.supplyAsync(() =>

回答 1 投票 0

Log4j 1.x 到 2.x 的 JDBCAppender 迁移

我正在尝试将应用程序从 log4j v1.2 迁移到 v2.17。在该应用程序中,他们通过导入在 Java 中使用 JDBCAppender,并将其扩展为一个类并执行一些操作。 嗬...

回答 1 投票 0

正则表达式解析log4j日志格式

有没有可以解析log4j日志格式的正则表达式?特别考虑多行事件,例如java异常? 例如 2023-08-31 00:10:52,734 主要信息 FileManager 酷 2023-08-31 00:10...

回答 1 投票 0

Spring boot + slf4j + log4j + 类 org.apache.logging.slf4j.SLF4JLoggerContext 无法转换为类

我有Spring boot 2.3.1 pom.xml 我有Spring boot 2.3.1 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>logger</groupId> <artifactId>logger</artifactId> <version>0.0.1-SNAPSHOT</version> <name>logger</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> <lombok.version>1.18.12</lombok.version> <log4j.version>1.2.17</log4j.version> <slf4j.version>1.7.30</slf4j.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>logback-classic</artifactId> <groupId>ch.qos.logback</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 班级 @Slf4j @SpringBootApplication public class LoggerApplication { public static void main(String[] args) { log.info("++++++++++++++++++++++++TEST+++++++++++++++++++++++++++++"); SpringApplication.run(LoggerApplication.class, args); } } 应用程序.属性 logging.config=classpath:log4j.properties log4j.properties log4j.rootLogger=INFO, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Target=System.out log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n 我尝试寻找解决方案,查看论坛上的类似主题,尝试各种排除依赖项的选项。 线程“main”中的异常 java.lang.ClassCastException:类 org.apache.logging.slf4j.SLF4JLoggerContext 无法转换为类 org.apache.logging.log4j.core.LoggerContext (org.apache.logging.slf4j.SLF4JLoggerContext 和 org.apache.logging.log4j.core.LoggerContext 位于未命名模块中 加载器“应用程序”)位于 我还尝试排除一些依赖项 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>logback-classic</artifactId> <groupId>ch.qos.logback</groupId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>*</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>*</artifactId> </exclusion> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> 但又出现错误,但现在无法再格式化日志了。 2021-01-13 19:12:15,881 信息 - ++++++++++++++++++++++++测试+++++++++++++++++++++++++++++++ 错误 StatusLogger 无法识别的格式说明符 [d] 错误 StatusLogger 无法识别的转换说明符 [d] 从转换模式中的位置 16 开始。 错误 StatusLogger 无法识别的格式说明符 [线程] 错误 StatusLogger 无法识别的转换说明符 [线程] 从转换模式中的位置 25 开始。 错误 StatusLogger 无法识别的格式说明符 [级别] 错误 StatusLogger 无法识别的转换说明符 [level] 从转换模式中的位置 35 开始。 ... 错误 StatusLogger 无法识别的格式说明符 [n] 错误 StatusLogger 无法识别的转换说明符 [n] 从转换模式中的位置 56 开始。 警告:不支持 sun.reflect.Reflection.getCallerClass。这会影响性能。 任何人都可以有任何想法如何解决它吗? 我找到了解决这个问题的方法。事实证明,问题出在其中一个私有库(elastik 的附加程序)的冲突上。 我执行了命令: mvn dependency:tree 然后找到传递依赖项,并将它们排除在所有类的路径上,以排除日志记录所需的库冲突。 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>logback-classic</artifactId> <groupId>ch.qos.logback</groupId> </exclusion> <exclusion> <artifactId>log4j-to-slf4j</artifactId> <groupId>org.apache.logging.log4j</groupId> </exclusion> </exclusions> </dependency> <dependency> <artifactId>springfox-boot-starter</artifactId> <groupId>io.springfox</groupId> <version>3.0.0</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${version.log4j.core}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency>

回答 1 投票 0

如何通过某些依赖注入来限制对象创建?

我正在创建一个具有自定义日志记录功能的类,该类在内部使用 Log4J。 如果某个类需要日志记录功能,我会将类的名称传递给此 LoggerObject 的构造函数。 我想要

回答 4 投票 0

无法初始化类org.apache.logging.log4j.util.PropertiesUtil

在 log4j-api-2.18.0.jar 文件中出现以下异常。但是,在 log4j-api-2.16.0.jar 中没有观察到它 运行时异常: java.lang.NoClassDefFoundError:无法初始化类...

回答 1 投票 0

使用 Tomcat 6 在 Spring Web 应用程序中设置 Commons Logging / Log4j 时出现问题

我在 tomcat 6 下部署的 apring web 应用程序中的日志记录设置有问题。 web应用程序使用commons-logging api,在运行时应该使用log4j。日志文件已创建但仍为空...

回答 7 投票 0

如何在 spring-boot 的记录器名称中不缩写源类名称?

当我运行 spring-boot 应用程序时,它显示以下日志: 2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean:映射过滤器:'

回答 1 投票 0

如何在 spring-boot 的记录器名称中不缩写源类名称?

当我运行 spring-boot 应用程序时,它显示以下日志: 2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean:映射过滤器:'

回答 1 投票 0

将 log4j.properties 转换为 log4j2.properties

我正在从 log4j 1.2 迁移到 log4j 2.22.0。 问题是我的项目包含一个 log4j.properties 文件,并且我在将其转换为 log4j2.properties 时遇到问题。我已经翻了很多盘了...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.