Java 在云监视中禁用Azure服务总线打印日志
我在aws lambda日志中收到以下错误消息:Java 在云监视中禁用Azure服务总线打印日志,java,azure,aws-lambda,Java,Azure,Aws Lambda,我在aws lambda日志中收到以下错误消息: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 因此,
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
因此,我添加了maven depdenecies,如下所示:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
我的log4j.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration packages="com.amazonaws.services.lambda.runtime.log4j2">
<Appenders>
<Lambda name="Lambda">
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n</pattern>
</PatternLayout>
</Lambda>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Lambda" />
</Root>
</Loggers>
</Configuration>
%d{yyyy-MM-dd HH:MM:ss}%X{AWSRequestId}%-5p%c{1}:%L-%m%n
如何禁用打印这些日志?首先,这不是错误。该消息表示类路径中不存在记录器实现,因此默认为NOP(无操作)日志。由于SLF4J是不同日志框架的抽象,除了只有SLF4J之外,还需要在类路径中包含特定的日志框架。由于您试图使用Lambda appender,因此需要添加到类路径中。这也将引入所需的SLF4J依赖项 截至2020年5月5日的最新版本:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-log4j2</artifactId>
<version>1.2.0</version>
</dependency>
亚马逊网站
aws-lambda-java-log4j2
1.2.0
我认为问题与项目的日志依赖性有关
一方面,在Log4j2上有AWS Lambda,它使用Log4j2进行日志记录。另一方面,您有Azure服务总线,它使用SLF4J API facade进行日志记录。您需要配置系统以支持这两种日志记录方法
首先,在pom.xml
文件中需要以下依赖项:
...
亚马逊网站
aws-lambda-java-log4j2
1.2.0
org.apache.logging.log4j
log4j-slf4j-impl
2.13.2
....
第一个依赖项允许您向AWS Lambda发出日志跟踪
最后一个是Log4j2 SLF4J java桥,这是Azure服务总线日志记录所必需的
请同时删除与组org.slf4j
关联的依赖项slf4j simple
,这将是不必要的
此依赖项就绪后,请包括以下行:
在XML配置文件中(按照惯例,最好将Log4j2配置文件命名为Log4j2.XML
,而不是log4j.XML
,更适合于旧的log4j库版本)
您的log4j2.xml
应该如下所示:
%d{yyyy-MM-dd HH:MM:ss}%X{AWSRequestId}%-5p%c{1}:%L-%m%n
Hi Shyam感谢您的回复。我有log4j2部门。让我检查一下1.2.0版本。它只是增加了aws lambda的冷启动。但是当我添加slf4j库时。aws lambda的冷启动时间减少了,但是azure service bus日志也被打印到了云监视日志中。我如何修改我的log4j配置以停止打印这些信息日志。我不想更改日志级别。如果你有log4j2依赖项,那么您不应该单独添加SLF4J依赖项。log4j2将引入所需的依赖项。我更新了版本并尝试了。得到相同的错误。如前所述,我的pom中已经有aws-log4j库。谢谢。我尝试了appraoch。服务总线日志仍在打印中。然后我从项目中删除了log4j.xml。然后我注意到我的lambda日志没有打印出来,但是服务总线日志仍然很重要,尽管我没有任何log4j.xml。请让我检查一下服务总线日志是如何实际生成的。这是来自maven depdency tree[INFO]+-com.microsoft.azure:azure servicebus:jar:3.4.0:compile[INFO]|+-org.apache.qpid:proton-j:jar:0.33.4:compile[INFO]|+-com.microsoft.azure:qpid-proton-j-extensions:jar:1.2.3:compile[INFO]|+-org.slf4j:slf4j-api:jar:1.7.28:compile非常感谢。我用进一步的信息更新了我的答案。请,你能试试吗?我忘了提到:请,你也可以从pom.xml
文件中删除与组org.slf4j
相关的依赖项,它们不再是必需的,因为它们是作为log4j-slf4j18-impl
工件和Azure服务总线库的可传递依赖项提供的。
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-log4j2</artifactId>
<version>1.2.0</version>
</dependency>