首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Apache结构化日志记录

Apache结构化日志记录
EN

Stack Overflow用户
提问于 2022-09-12 10:25:01
回答 1查看 153关注 0票数 2

我希望为Ignite启用结构化日志记录。点火器在码头集装箱内运行。我启用了log4j2模块并添加了一个log4j2配置文件,该文件尝试使用,就像描述的这里那样,但是在日志中我得到了消息:

控制台包含无效元素或属性"JsonTemplateLayout“。

这可能是由于Log4j-布局-模板-json依赖项内部没有可用的点火器造成的。是否有一种方法可以将依赖项添加到Ignite,或者是否有关于如何使结构化日志工作的另一种选择?

点火结构:

代码语言:javascript
运行
复制
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd">
  <bean class="org.apache.ignite.configuration.IgniteConfiguration">
    ...
    <property name="gridLogger">
      <bean class="org.apache.ignite.logger.log4j2.Log4J2Logger">
        <constructor-arg type="java.lang.String" value="config/ignite-log4j2-custom.xml"/>
      </bean>
    </property>
  </bean>
</beans>

log4j2配置:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="60" status="debug">
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <!-- <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> -->
            <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="ACCEPT"/>
            <JsonTemplateLayout eventTemplateUri="classpath:EcsLayout.json"/>
        </Console>
        <Console name="CONSOLE_ERR" target="SYSTEM_ERR">
            <!-- <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/> -->
            <JsonTemplateLayout eventTemplateUri="classpath:EcsLayout.json"/>
        </Console>
        <File name="CONSISTENCY" fileName="${sys:IGNITE_HOME}/work/log/consistency.log">
            <PatternLayout>
                <Pattern>"[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"</Pattern>
            </PatternLayout>
        </File>
        <Routing name="FILE">
            <Routes pattern="$${sys:nodeId}">
                <Route>
                    <RollingFile name="Rolling-${sys:nodeId}" fileName="${sys:IGNITE_HOME}/work/log/${sys:appId}-${sys:nodeId}.log"
                                 filePattern="${sys:IGNITE_HOME}/work/log/${sys:appId}-${sys:nodeId}-%i-%d{yyyy-MM-dd}.log.gz">
                        <PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/>
                        <Policies>
                            <TimeBasedTriggeringPolicy interval="6" modulate="true" />
                            <SizeBasedTriggeringPolicy size="10 MB" />
                        </Policies>
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>
    </Appenders>
    <Loggers>
        <!-- <Logger name="org.apache.ignite" level="INFO"/> -->
        <!--
            Uncomment to disable courtesy notices, such as SPI configuration
            consistency warnings.
        -->
        <!--
        <Logger name="org.apache.ignite.CourtesyConfigNotice" level=OFF/>
        -->
        <Logger name="org.springframework" level="WARN"/>
        <Logger name="org.eclipse.jetty" level="WARN"/>
        <Logger name="org.apache.ignite.internal.visor.consistency" additivity="false" level="INFO">
            <AppenderRef ref="CONSISTENCY"/>
        </Logger>
        <!--
        Avoid warnings about failed bind attempt when multiple nodes running on the same host.
        -->
        <Logger name="org.eclipse.jetty.util.log" level="ERROR"/>
        <Logger name="org.eclipse.jetty.util.component" level="ERROR"/>
        <Logger name="com.amazonaws" level="WARN"/>
        <Root level="INFO">
            <!-- Uncomment to enable logging to console. -->
            <AppenderRef ref="CONSOLE" level="INFO"/>
            <AppenderRef ref="CONSOLE_ERR" level="ERROR"/>
            <AppenderRef ref="FILE" level="DEBUG"/>
        </Root>
    </Loggers>
</Configuration>

当将JAR添加到库中时(如下面Stanislav所建议的),我得到了进一步的改进,但也得到了一个错误(不是java人,因此非常感谢任何提示):

代码语言:javascript
运行
复制
main ERROR An exception occurred processing Appender CONSOLE org.apache.logging.log4j.core.appender.AppenderLoggingException: java.lang.IllegalAccessError: class org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$StringBuilderEncoder tried to access method 'void org.apache.logging.log4j.core.layout.TextEncoderHelper.encodeText(java.nio.charset.CharsetEncoder, java.nio.CharBuffer, java.nio.ByteBuffer, java.lang.StringBuilder, org.apache.logging.log4j.core.layout.ByteBufferDestination)' (org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$StringBuilderEncoder and org.apache.logging.log4j.core.layout.TextEncoderHelper are in unnamed module of loader 'app')
        at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:165)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:134)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:125)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:89)
        at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:542)
        at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:500)
        at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:483)
        at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
        at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:82)
        at org.apache.logging.log4j.core.Logger.log(Logger.java:161)
        at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2205)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2159)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2142)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2017)
        at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1983)
        at org.apache.logging.log4j.spi.AbstractLogger.info(AbstractLogger.java:1275)
        at org.apache.ignite.logger.log4j2.Log4J2Logger.info(Log4J2Logger.java:472)
        at org.apache.ignite.logger.log4j2.Log4J2Logger.info(Log4J2Logger.java:464)
        at org.apache.ignite.internal.GridLoggerProxy.info(GridLoggerProxy.java:137)
        at org.apache.ignite.internal.plugin.IgniteLogInfoProviderImpl.ackConfiguration(IgniteLogInfoProviderImpl.java:222)
        at org.apache.ignite.internal.plugin.IgniteLogInfoProviderImpl.ackKernalInited(IgniteLogInfoProviderImpl.java:98)
        at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:902)
        at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1799)
        at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1721)
        at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1160)
        at org.apache.ignite.internal.IgnitionEx.startConfigurations(IgnitionEx.java:1054)
        at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:940)
        at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:839)
        at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:709)
        at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:678)
        at org.apache.ignite.Ignition.start(Ignition.java:353)
        at org.apache.ignite.startup.cmdline.CommandLineStartup.main(CommandLineStartup.java:365)
Caused by: java.lang.IllegalAccessError: class org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$StringBuilderEncoder tried to access method 'void org.apache.logging.log4j.core.layout.TextEncoderHelper.encodeText(java.nio.charset.CharsetEncoder, java.nio.CharBuffer, java.nio.ByteBuffer, java.lang.StringBuilder, org.apache.logging.log4j.core.layout.ByteBufferDestination)' (org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$StringBuilderEncoder and org.apache.logging.log4j.core.layout.TextEncoderHelper are in unnamed module of loader 'app')
        at org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$StringBuilderEncoder.encode(JsonTemplateLayout.java:241)
        at org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$StringBuilderEncoder.encode(JsonTemplateLayout.java:216)
        at org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.encode(JsonTemplateLayout.java:304)
        at org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.encode(JsonTemplateLayout.java:58)
        at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:197)
        at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:190)
        at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:181)
        at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:161)
        ... 31 more

溶液

正如Stanislav (见已接受的答案)所建议的,解决方案是下载JAR,并将其置于$IGNITE_HOME/libs之下。上面提到的错误是由版本错配引起的。有以下具有正确版本的JAR使其工作:

  • log4j-api-2.17.1.jar (默认情况下由点火器分布提供)
  • log4j-core-2.17.1.jar (由点火分布提供的缺省值)
  • 点火器-log4j2-2.13.0.jar(由点火器分布提供的默认值)
  • Log4j-布局-模板-json-2.17.1.jar(添加,不适用于2.18.x版)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-12 10:47:31

如果使用Maven运行Ignite,则需要将所需的依赖项添加到应用程序POM中,如文档所述:

代码语言:javascript
运行
复制
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-layout-template-json</artifactId>
    <version>2.18.0</version>
</dependency>

如果使用ZIP发行版运行Ignite,则需要将依赖项作为JAR下载,例如从这里下载,并将其添加到$IGNITE_HOME/libs中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73687801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档