Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Log4J ConsolePender不可分配给Athena JDBC驱动程序_Java_Maven_Logging_Log4j_Amazon Athena - Fatal编程技术网

Java Log4J ConsolePender不可分配给Athena JDBC驱动程序

Java Log4J ConsolePender不可分配给Athena JDBC驱动程序,java,maven,logging,log4j,amazon-athena,Java,Maven,Logging,Log4j,Amazon Athena,我很难让Athena JDBC驱动程序正确登录。我倾向于SL4J SimpleLogger,但似乎不支持该工厂,但支持ust Log4J(如果您想知道为什么会有2个日志框架,请写下这篇文章)。不幸的是,由于一个新的jdbc驱动程序,我们不想更改所有当前的应用程序日志记录 当实例化没有Log4J依赖关系的记录器时,我得到一个ClassNotFoundException,这是预期的,并且显示Log4J不包括在内 log4j:ERROR A "org.apache.log4j.ConsoleAppen

我很难让Athena JDBC驱动程序正确登录。我倾向于SL4J SimpleLogger,但似乎不支持该工厂,但支持ust Log4J(如果您想知道为什么会有2个日志框架,请写下这篇文章)。不幸的是,由于一个新的jdbc驱动程序,我们不想更改所有当前的应用程序日志记录

当实例化没有Log4J依赖关系的记录器时,我得到一个ClassNotFoundException,这是预期的,并且显示Log4J不包括在内

log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "com.simba.athena.shaded.apache.log4j.Appender" variable.
log4j:ERROR The class "com.simba.athena.shaded.apache.log4j.Appender" was loaded by 
log4j:ERROR [jdk.internal.loader.ClassLoaders$AppClassLoader@368239c8] whereas object of type 
log4j:ERROR "org.apache.log4j.ConsoleAppender" was loaded by [jdk.internal.loader.ClassLoaders$AppClassLoader@368239c8].
log4j:ERROR Could not instantiate appender named "stdout".
Maven依赖项:

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>com.syncron.amazonaws</groupId>
            <artifactId>simba-athena-jdbc-driver</artifactId>
            <version>2.0.2</version>
        </dependency>
这有点奇怪,因为两个类都使用相同的类加载器加载,所以类加载器层次结构问题不应该是问题所在。我还验证了驱动程序绑定log4j1.2,因为它在某些错误中指向JavaDocs


如果Log4J专家有任何提示,我们将不胜感激。谢谢

如果有人遇到同样的问题,在调试类加载一段时间后,以下是我的发现:

AWS提供的Simba Athena驱动程序附带Log4J。Log4J Apache类在“着色”包中重新打包:

com.simba.athena.shaded.apache.log4j.Xyz
这些类仍然会像参考资料中的log4.properties文件一样加载apache配置。 “标准”Apache Log4J类在与这些类交互操作时会遇到问题(例如,Apache Appender不能用于Athena驱动程序加载的Log4J.properties中)

如果您只想绕过Athena驱动程序创建的错误消息(甚至可能不会像我提到的那样在应用程序中使用Log4J),您可以在标准1.2 Log4J配置中处理着色包中的类,并从构建路径中删除任何Log4J依赖项

例如:

而不是

log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
使用

我知道这不是一个适用于所有场景的完美解决方案,但至少你可以通过这种方式控制雅典娜司机的错误

log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
log4j.appender.Appender1=com.simba.athena.shaded.apache.log4j.ConsoleAppender