【问题标题】:Using log4j2 with AWS Lambda将 log4j2 与 AWS Lambda 一起使用
【发布时间】:2020-04-09 01:29:43
【问题描述】:

我在尝试将 AWS lambda 与 log4j2 一起使用时遇到以下错误。我遵循了在 https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-log4j2

ERROR StatusLogger 找不到 log4j2 配置文件。使用默认配置:仅将错误记录到控制台。将系统属性 'org.apache.logging.log4j.simplelog.StatusLogger.level' 设置为 TRACE 以显示 Log4j2 内部初始化日志记录。

有人可以帮忙吗?

【问题讨论】:

    标签: amazon-web-services aws-lambda log4j2


    【解决方案1】:

    我可以让它正常工作 - 让我们看看你的设置有什么不同。我正在使用 OpenJDK 11 和 Java 11 Lambda。我的 Lambda 处理程序如下所示:

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class LambdaHandler {
        private static final Logger logger = LogManager.getLogger(LambdaHandler.class);
    
        // your handler entry point may be different but that shouldn't matter
        public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) {
        }
    }
    

    我的pom.xml 中的依赖项是: com.amazonaws aws-lambda-java-core 1.2.0

        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-lambda-java-log4j2</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.13.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.13.0</version>
        </dependency>
    
        <dependency>
            <groupId>com.github.edwgiz</groupId>
            <artifactId>maven-shade-plugin.log4j2-cachefile-transformer</artifactId>
            <version>2.8.1</version>
        </dependency>
    

    shade 插件的build/plugins 部分是:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.2</version>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <manifestEntries>
                                <Multi-Release>true</Multi-Release>
                            </manifestEntries>
                        </transformer>
                        <transformer
                                implementation="com.github.edwgiz.mavenShadePlugin.log4j2CacheTransformer.PluginsCacheFileTransformer">
                        </transformer>
                    </transformers>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>com.github.edwgiz</groupId>
                        <artifactId>maven-shade-plugin.log4j2-cachefile-transformer</artifactId>
                        <version>2.8.1</version>
                    </dependency>
                </dependencies>
            </plugin>
    

    当我的 Lambda 启动时,我会收到消息:

    WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.

    我已经用谷歌搜索了这个,但还没有修复它。但是,它似乎并没有伤害任何东西。

    【讨论】:

    • 谢谢@Stdunbar。看来我的 log4j2.xml 不在类路径上。修复后它工作正常。
    • 回复:关于不支持 getCallerClass 的警告 - 这是因为 log4j2 jar 是 AWS Lambda 不支持的多版本 jar。要解决此问题,请在此处查看我的建议:stackoverflow.com/a/67978671/2404240
    猜你喜欢
    • 2016-07-08
    • 2021-04-13
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2023-04-08
    相关资源
    最近更新 更多