如何在BEAM worker上使用Log4j2日志?

dgjrabp2  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(246)

我尝试在BEAM管道中使用Log4j2日志实现和Slf4j API。在maven中,它看起来像这样:

<dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.20.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j2-impl</artifactId>
      <version>2.20.0</version>
    </dependency>

它在当地运作良好。对于我开始管道的容器,日志记录也工作得很好。但是,在工作进程内部,这种设置会导致一些问题:

Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j2-impl cannot be present with log4j-to-slf4j

这个额外的库log4j-to-slf4j不是我的项目的一部分,也没有在依赖项中列出(也没有在传递依赖项中列出)。看起来像是BEAM sdk自己添加的。问题是:如何配置BEAM以使用我Log4j版本?

2hh7jdfx

2hh7jdfx1#

当我们使用Maven archetype生成2.47.0版本的Beam项目时:

mvn archetype:generate \
    -DarchetypeGroupId=org.apache.beam \
    -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
    -DarchetypeVersion=2.47.0 \
    -DgroupId=org.example \
    -DartifactId=word-count-beam \
    -Dversion="0.1" \
    -Dpackage=org.apache.beam.examples \
    -DinteractiveMode=false

它在pom.xml文件中生成具有以下依赖项的项目:

<properties>
      <beam.version>2.47.0</beam.version>
      <slf4j.version>1.7.30</slf4j.version>
</properties>

<dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>${slf4j.version}</version>
</dependency>

<dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-jdk14</artifactId>
       <version>${slf4j.version}</version>
       <!-- When loaded at runtime this will wire up slf4j to the JUL backend -->
       <scope>runtime</scope>
</dependency>

然后在代码中,像Java项目中一样使用SL4J

public class TeamLeagueApp {
    private static final Logger LOGGER = LoggerFactory.getLogger(TeamLeagueApp.class);

    ....
    LOGGER.info("My log");

我建议你使用Beam自带的依赖和版本来处理日志,以防止一些依赖冲突和问题。

相关问题