Я пытаюсь запустить проект Spring Boot и AWS Lambda одновременно. /logging-slf4j.html, должна быть включена следующая зависимость, чтобы она работала:
implementation("org.apache.logging.log4j:log4j-slf4j2-impl:VERSION").
Однако при включении зависимости я получаю следующую проблему/ошибку от моего Sam cli
SLF4J(W): Class path contains multiple SLF4J providers.
SLF4J(W): Found provider [org.apache.logging.slf4j.SLF4JServiceProvider@3c09711b]
SLF4J(W): Found provider [ch.qos.logback.classic.spi.LogbackServiceProvider@5cc7c2a6]
SLF4J(W): See https://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J(I): Actual provider is of type [org.apache.logging.slf4j.SLF4JServiceProvider@3c09711b]
Error loading class playground.WebhookEntry: java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Unknown Source)
at java.base/java.lang.Class.forName(Unknown Source)
Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j2-impl cannot be present with log4j-to-slf4j
at org.apache.logging.slf4j.Log4jLoggerFactory.validateContext(Log4jLoggerFactory.java:67)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:49)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:32)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:52)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:32)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:432)
at org.apache.logging.slf4j.SLF4JLoggerContext.createLogger(SLF4JLoggerContext.java:57)
at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:51)
at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:40)
at org.apache.logging.log4j.spi.LoggerContext.getLogger(LoggerContext.java:46)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:555)
at playground.WebhookEntry.(WebhookEntry.java:15)
... 3 more
< /code>
Я уже пытался исключить log4j-to-slf4j < /code> из всех зависимостей пружины через:
< /p>
implementation("some.spring.dependency:version) {
exclude(group = "org.apache.logging.log4j", module = "log4j-to-slf4j")
}
< /code>
Тем не менее, это привело только к ошибкам броски пружины. Я также проверил, что произойдет, если я не использую org.apache.logging.log4j: log4j-slf4j2-impl . Результатом является использование стандартного журнала или, другими словами, игнорируя мой log4j2.xml, что делает невозможным уровень журнала трассировки или политику.
Есть ли способ сделать Spring и AWS Lambdas совместимым с журналом log4j2? И под совместимым я имею в виду способ, которым оба (Spring и AWS) используют мой файл конфигурации log4j2.xml.
лямбда -точка входа: < /strong> < /p>
package playground;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class WebhookEntry implements RequestStreamHandler {
private static final Logger LOGGER = LogManager.getLogger(WebhookEntry.class);
@Override
public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException {
LOGGER.trace("RECEIVED TRACE MESSAGE");
LOGGER.info("RECEIVED INFO MESSAGE");
}
}
класс приложений Spring:
package playground;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringApp {
public static void main(String[] args) {
SpringApplication.run(SpringApp.class, args);
}
}
build.gradle.kts:
plugins {
id("java")
id("org.springframework.boot") version "3.4.1"
id("io.spring.dependency-management") version "1.0.11.RELEASE"
}
repositories {
mavenCentral()
}
dependencies {
testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-actuator")
// AWS
implementation("com.amazonaws:aws-lambda-java-core:1.2.3")
implementation("com.amazonaws:aws-lambda-java-events:3.14.0")
implementation("software.amazon.awssdk:sqs:2.30.17")
runtimeOnly("com.amazonaws:aws-lambda-java-log4j2:1.6.0")
// Logging
implementation("org.apache.logging.log4j:log4j-core:2.24.3")
implementation("org.apache.logging.log4j:log4j-slf4j2-impl:2.24.3")
}
log4j2.xml:
< /code>
Я посмотрел на пост, предложенный Piotr P. Karwasz: вызвано: org.apache.logging.log4j.loggingexception: log4j-slf4j-impl не может присутствовать с log4j -По-slf4j < /p>
Я попытался решить проблему по подходам, которые там упоминаются. Однако результат такой же, как если бы я просто исключил log4j-to-slf4j < /code>
зависимость, которую я уже пробовал, как указано выше. Возможно, я должен также включить результирующую ошибку здесь: < /p>
2025-02-21T13:38:18.815452773Z main ERROR Unable to create file logs/app.log java.io.IOException: Could not create directory /var/task/logs
at org.apache.logging.log4j.core.util.FileUtils.mkdir(FileUtils.java:129)
at org.apache.logging.log4j.core.util.FileUtils.makeParentDirs(FileUtils.java:143)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:863)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:844)
at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:146)
at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:112)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:307)
at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:144)
at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:65)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:124)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1180)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1099)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1091)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:695)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:270)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:319)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:673)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:762)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:784)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:300)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:46)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:138)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:555)
at de.trinext.ih_nf_mapper.aws.WebhookEntry.(WebhookEntry.java:28)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Unknown Source)
at java.base/java.lang.Class.forName(Unknown Source)
at com.amazonaws.services.lambda.runtime.api.client.HandlerInfo.fromString(HandlerInfo.java:34)
at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.findRequestHandler(AWSLambda.java:116)
at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.startRuntime(AWSLambda.java:215)
at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.startRuntime(AWSLambda.java:190)
at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.main(AWSLambda.java:180)
2025-02-21T13:38:18.838210717Z main ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile: java.lang.IllegalStateException: ManagerFactory [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory@306f16f3] unable to create manager for [logs/app.log] with data [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$FactoryData@702b8b12[pattern=logs/app-%d{yyyy-MM-dd}.log, append=true, bufferedIO=true, bufferSize=8192, policy=CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=true)]), strategy=DefaultRolloverStrategy(min=1, max=7, useMax=true), advertiseURI=null, layout=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n, filePermissions=null, fileOwner=null]] java.lang.IllegalStateException: ManagerFactory [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory@306f16f3] unable to create manager for [logs/app.log] with data [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$FactoryData@702b8b12[pattern=logs/app-%d{yyyy-MM-dd}.log, append=true, bufferedIO=true, bufferSize=8192, policy=CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=true)]), strategy=DefaultRolloverStrategy(min=1, max=7, useMax=true), advertiseURI=null, layout=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n, filePermissions=null, fileOwner=null]]
at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:148)
at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:112)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:307)
at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:144)
at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:65)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:124)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1180)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1099)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1091)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:695)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:270)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:319)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:673)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:762)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:784)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:300)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:46)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:138)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:555)
at de.trinext.ih_nf_mapper.aws.WebhookEntry.(WebhookEntry.java:28)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Unknown Source)
at java.base/java.lang.Class.forName(Unknown Source)
at com.amazonaws.services.lambda.runtime.api.client.HandlerInfo.fromString(HandlerInfo.java:34)
at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.findRequestHandler(AWSLambda.java:116)
at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.startRuntime(AWSLambda.java:215)
at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.startRuntime(AWSLambda.java:190)
at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.main(AWSLambda.java:180)
2025-02-21T13:38:18.839409423Z main ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile: java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:268)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:140)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1180)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1099)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1091)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:695)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:270)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:319)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:673)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:762)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:784)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:300)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:46)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:138)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:555)
at de.trinext.ih_nf_mapper.aws.WebhookEntry.(WebhookEntry.java:28)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Unknown Source)
at java.base/java.lang.Class.forName(Unknown Source)
at com.amazonaws.services.lambda.runtime.api.client.HandlerInfo.fromString(HandlerInfo.java:34)
at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.findRequestHandler(AWSLambda.java:116)
at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.startRuntime(AWSLambda.java:215)
at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.startRuntime(AWSLambda.java:190)
at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.main(AWSLambda.java:180)
Согласно этой документации: https://docs.spring.io/spring-boot/how- ... ging.log4j
Я также попытался заменить ch.qos.logback.classic.spi.logbackserviceprovider (CH.QOS.Logback: rogack-classic) с log4j-slf4j-impl через build.gradle.kts добавление: < /p>
modules {
module("ch.qos.logback:logback-classic") {
replacedBy("org.apache.logging.log4j:log4j-slf4j-impl", "fix conflict")
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... pring-boot
Log4j-slf4j2-impl не может присутствовать с log4j-to-slf4j (AWS Lambda, Spring-Boot, log4j2) ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Log4j-slf4j2-impl не может присутствовать с log4j-to-slf4j (AWS Lambda, Spring-Boot, log4j2)
Anonymous » » в форуме JAVA - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-
-
-
NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder (с SLF4J, Logback и Spring Boot)
Anonymous » » в форуме JAVA - 0 Ответы
- 39 Просмотры
-
Последнее сообщение Anonymous
-