java - Micronaut AWS Lambda 日志未显示在云端
问题描述
我设置了一个 micronaut java aws lambda 项目,如下所述: https ://guides.micronaut.io/micronaut-function-aws-lambda/guide/index.html
在 Function 类的主函数中,我有一个例子:
System.out.println("LOG TEST LOG LOG");
按照文档中的描述在本地运行
echo '{"param1": "23"}' | java -jar build/lib/myjar-full.jar
正确显示控制台输出。
在 AWS lambda 中在线运行相同的功能,不会在 cloudwatch 日志中记录该消息。
如 Micronaut 文档中所述,通过 SAM CLI 在本地运行也会发生同样的问题。
同样使用 slf4j 记录器,我仍然没有得到输出。我在下面提供了我的 micronaut lambda 函数的所有相关代码
package lambda.test;
import io.micronaut.function.executor.FunctionInitializer;
import io.micronaut.function.FunctionBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.util.function.Function;
@FunctionBean("example-lambda")
public class LambdaFunction extends FunctionInitializer implements Function<Request, Response> {
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass().getSimpleName());
/**
* This main method allows running the function as a CLI application using: echo '{}' | java -jar function.jar
* where the argument to echo is the JSON to be parsed.
*/
public static void main(String... args) throws IOException {
System.out.println("LOG TEST LOG LOG");
logger.info(String.format("Received the following payload: %s", String.join(";", args)));
LambdaFunction function = new LambdaFunction();
function.run(args, (context) -> function.apply(context.get(Request.class)));
}
我还在log4j2.xml
资源中创建了配置文件,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
micronaut 附带的默认logback.xml
配置具有以下内容:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%cyan(%d{HH:mm:ss.SSS}) %gray([%thread]) %highlight(%-5level) %magenta(%logger{36}) - %msg%n</pattern>
</encoder>
</appender>
<root level="error">
<appender-ref ref="STDOUT" />
</root>
</configuration>
两种尝试登录的方式都无法在线或使用 SAM CLI。我仍在研究如何做到这一点,但到目前为止,我无法在他们的文档或其他地方找到任何信息。
解决方案
推荐阅读
- apache-spark-sql - Databricks:将 Parquet 表转换为 Delta 表
- r - 关于使用 pheatmap 包翻转行和列
- cuda - 如何防止thrust::reduce_by_key 写入可分页内存?
- android - 我的 Android 游戏在 Play 商店发布后一直停止!适用于 apk
- javascript - 是否可以装饰包裹捆绑器 dist 文件夹?
- ios - 滑动其中的 UISlider 时如何防止单元格滑动
- java - 当应用程序关闭时,BroadcastReceiver 和/或 AlarmManager 不起作用
- ios - 从 ble swift 读取值的问题
- python - 使用 SQLAlchemy 继承参数的 SQLite 和 Postgres 部分索引支持
- python - 如何为用户生成随机 ID 并将其保存在文件中。在 Discord.py 中应该始终可以访问此 ID?