Получение класса org. apache .logging.slf4j.Log4jLogger не может быть приведено к com.test.logging.CustomLogger - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь реализовать пользовательский регистратор с помощью регистратора slf4j, где я получаю следующий класс вопросов org. apache .logging.slf4j.Log4jLogger не может быть приведен к com.test.logging.CustomLogger

Из мои первоначальные проблемы и наблюдения их должны быть некоторые исключения, требуемые от POM для регистратора slf4j, но не уверен, от какой зависимости.

Пользовательский класс регистратора

import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.spi.ExtendedLogger;
import org.apache.logging.slf4j.Log4jLogger;

public class CustomLogger extends Log4jLogger implements ILogger {

    private static final String STACKTRACE = "STACKTRACE";
    private static final long serialVersionUID = -4429947539527791404L;
    private static Logger TRACE_LOGGER = LogManager.getLogger(STACKTRACE);

    public CustomLogger(ExtendedLogger logger, String name) {
        super(logger, name);
    }

    @Override
    public void error(CustomLoggerMessage logMessage, Throwable throwable) {
        String formattedMessage = logMessage.formattedMessage(this.getName());
        super.error("{} - Exception : {} ", formattedMessage, ExceptionUtils.getStackTrace(throwable));
        TRACE_LOGGER.error("{} - Exception : {} ", formattedMessage, ExceptionUtils.getStackTrace(throwable));
    }

    @Override
    public void error(CustomLogMessage logMessage, Object... var2) {
        String formattedMessage = logMessage.formattedMessage(this.getName());
        super.error(formattedMessage, var2);
        TRACE_LOGGER.error(formattedMessage, var2);
    }

    @Override
    public void error(CustomLogMessage logMessage) {
        String formattedMessage = logMessage.formattedMessage(this.getName());
        super.error(formattedMessage);
        TRACE_LOGGER.error(formattedMessage);
    }

    @Override
    public void info(CustomLogMessage logMessage, Throwable throwable) {
        if (super.isInfoEnabled()) {
            super.info(logMessage.formattedMessage(this.getName()), ExceptionUtils.getStackTrace(throwable));
        }
    }

    @Override
    public void info(CustomLogMessage logMessage, Object... var2) {
        if (super.isInfoEnabled()) {
            super.info(logMessage.formattedMessage(this.getName()), var2);
        }
    }

    @Override
    public void info(CustomLogMessage logMessage) {
        if (super.isInfoEnabled()) {
            super.info(logMessage.formattedMessage(this.getName()));
        }
    }
}

Вот мой пользовательский регистратор Util

import org.slf4j.LoggerFactory;

public class CustomLoggerUtil {
    public static CustomLogger getCustomLogger(Class aClass) {
        return (CustomLogger) LoggerFactory.getLogger(aClass);
    }

    public static CustomLogger getCustomLogger(String name) {
        return (CustomLogger) LoggerFactory.getLogger(name);
    }
}

Вот мой Pom. xml

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8
        </project.reporting.outputEncoding>

        <java.version>11</java.version>

        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>12.2.0.1</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.27.0-GA</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
...