简体   繁体   English

如何在 log4j2.xml 中配置 Log4J2 Kubernetes 支持

[英]How to configure Log4J2 Kubernetes Support in log4j2.xml

I want to use the log4j2 Kubernetes Support to send my logs and information about the pod with fluent bit to ElasticSearch.我想使用 log4j2 Kubernetes Support 将我的日志和有关具有流利位的 pod 的信息发送到 ElasticSearch。 According to https://logging.apache.org/log4j/2.x/log4j-kubernetes/index.html there are some configuration values to be set.根据https://logging.apache.org/log4j/2.x/log4j-kubernetes/index.html有一些配置值要设置。 In my case I have to set log4j2.kubernetes.client.namespace, but I didn't managed to set the property correct.在我的情况下,我必须设置 log4j2.kubernetes.client.namespace,但我没有设法正确设置属性。

in my current version of log4j2.xml I've set nearly every variant I could imagine:在我当前版本的 log4j2.xml 中,我几乎设置了我能想象到的所有变体:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="log4j2.kubernetes.client.namespace">app-dev</Property>
        <Property name="kubernetes.client.namespace">app-dev</Property>
        <Property name="client.namespace">app-dev</Property>
        <Property name="log4j2_kubernetes_client_namespace">app-dev</Property>
        <Property name="kubernetes_client_namespace">app-dev</Property>
        <Property name="client_namespace">app-dev</Property>
        <Property name="namespace">app-dev</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Socket name="Elastic" host="fluent-bit" port="2020" protocol="tcp" bufferedIo="true">
            <JsonLayout includeStackTrace="true" includeNullDelimiter="true">
                <KeyValuePair key="containerId" value="${docker:containerId:-}"/>
                <KeyValuePair key="application" value="$${lower:${spring:spring.application.name}}"/>
                <KeyValuePair key="kubernetes.serviceAccountName" value="${k8s:accountName:-}"/>
                <KeyValuePair key="kubernetes.containerId" value="${k8s:containerId:-}"/>
                <KeyValuePair key="kubernetes.containerName" value="${k8s:containerName:-}"/>
                <KeyValuePair key="kubernetes.host" value="${k8s:host:-}"/>
                <KeyValuePair key="kubernetes.labels.app" value="${k8s:labels.app:-}"/>
                <KeyValuePair key="kubernetes.labels.pod-template-hash" value="${k8s:labels.podTemplateHash:-}"/>
                <KeyValuePair key="kubernetes.master_url" value="${k8s:masterUrl:-}"/>
                <KeyValuePair key="kubernetes.namespaceId" value="${k8s:namespaceId:-}"/>
                <KeyValuePair key="kubernetes.namespaceName" value="${k8s:namespaceName:-}"/>
                <KeyValuePair key="kubernetes.podID" value="${k8s:podId:-}"/>
                <KeyValuePair key="kubernetes.podIP" value="${k8s:podIp:-}"/>
                <KeyValuePair key="kubernetes.podName" value="${k8s:podName:-}"/>
                <KeyValuePair key="kubernetes.imageId" value="${k8s:imageId:-}"/>
                <KeyValuePair key="kubernetes.imageName" value="${k8s:imageName:-}"/>
            </JsonLayout>
        </Socket>
    </Appenders>
    <Loggers>
        <Logger name="xx.xxx.xxxx" level="info" additivity="false">
            <AppenderRef ref="Elastic"/>
            <AppenderRef ref="Console"/>
        </Logger>

        <Root level="info">
            <AppenderRef ref="Elastic"/>
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

The Stacktrace I get when the pod starts: pod 启动时我得到的 Stacktrace:

Exception in thread "main" java.lang.NoSuchMethodError: 'java.lang.String org.apache.logging.log4j.util.PropertiesUtil.getStringProperty(java.lang.String[], java.lang.String, org.apache.logging.log4j.util.Supplier)'
    at org.apache.logging.log4j.kubernetes.KubernetesClientProperties.getApiVersion(KubernetesClientProperties.java:66)
    at org.apache.logging.log4j.kubernetes.KubernetesClientBuilder.kubernetesClientConfig(KubernetesClientBuilder.java:42)
    at org.apache.logging.log4j.kubernetes.KubernetesClientBuilder.createClient(KubernetesClientBuilder.java:35)
    at org.apache.logging.log4j.kubernetes.KubernetesLookup.initialize(KubernetesLookup.java:67)
    at org.apache.logging.log4j.kubernetes.KubernetesLookup.lookup(KubernetesLookup.java:115)
    at org.apache.logging.log4j.core.lookup.AbstractLookup.lookup(AbstractLookup.java:33)
    at org.apache.logging.log4j.core.lookup.Interpolator.lookup(Interpolator.java:198)
    at org.apache.logging.log4j.core.lookup.StrSubstitutor.resolveVariable(StrSubstitutor.java:1060)
    at org.apache.logging.log4j.core.lookup.StrSubstitutor.substitute(StrSubstitutor.java:982)
    at org.apache.logging.log4j.core.lookup.StrSubstitutor.substitute(StrSubstitutor.java:878)
    at org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(StrSubstitutor.java:433)
    at org.apache.logging.log4j.core.config.plugins.visitors.PluginBuilderAttributeVisitor.visit(PluginBuilderAttributeVisitor.java:49)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.injectFields(PluginBuilder.java:185)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:121)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1002)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:942)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:934)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:934)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:934)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:552)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:241)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:288)
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:579)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:651)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:668)
    at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:138)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:45)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:48)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:30)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388)

Log4j2 part of my pom.xml:我的 pom.xml 的 Log4j2 部分:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.13.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.13.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-jul</artifactId>
            <version>2.13.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.13.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-kubernetes</artifactId>
            <version>2.13.2</version>
        </dependency>
        <dependency>
            <groupId>io.fabric8</groupId>
            <artifactId>kubernetes-client</artifactId>
            <version>4.4.1</version>
        </dependency>

How can I set the property correct or can I set it as an enviroment variable / jvm argument to be more flexible with different namespaces?如何正确设置属性,或者我可以将其设置为环境变量/ jvm 参数,以便更灵活地使用不同的命名空间? (Alternatively I would create a config map with the file) (或者,我会使用该文件创建一个配置 map)

You are getting a NoSuchMethodError.你得到一个 NoSuchMethodError。 The method that is being called was added in Log4j 2.13.0.正在调用的方法是在 Log4j 2.13.0 中添加的。 This means that somehow you are getting a version of org.apache.logging.log4j.util.PropertiesUtil from a release earlier than that.这意味着您以某种方式从早于该版本的版本中获得了 org.apache.logging.log4j.util.PropertiesUtil 版本。 You need to check all your jars to make sure you don't somehow have 2 versions of that on the classpath.您需要检查所有 jars 以确保您在类路径中不存在 2 个版本。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM