bluedenim / log4j-s3-search

Log4j appender with S3, Azure, Google Cloud, and search publishing
MIT License
65 stars 44 forks source link

Please support me in integrating with Spark 3.2 #154

Open sontt710 opened 2 weeks ago

sontt710 commented 2 weeks ago

I am trying to use Log4j 1.x to send logs to S3, but I am encountering the following error. I am using the following jar files in the classpath:

Jar

-rw-r--r-- 1 root root 43082 Feb 22 2021 appender-core-2.8.4.jar -rw-r--r-- 1 root root 11054 Feb 22 2021 appender-log4j-2.8.4.jar -rw-r--r-- 1 root root 489884 Oct 3 16:28 log4j-1.2.17.jar -rw-r--r-- 1 root root 41472 Oct 3 16:28 slf4j-api-1.7.30.jar -rw-r--r-- 1 root root 12188 Jul 20 2021 slf4j-log4j12-1.7.32.jar -rw-r--r-- 1 root root 12415771 May 27 2016 aws-java-sdk-1.7.15.jar -rw-r--r-- 1 root root 1054212 Oct 3 12:31 aws-java-sdk-core-1.12.772.jar -rw-r--r-- 1 root root 1275778 Sep 11 05:02 aws-java-sdk-s3-1.12.772.jar -rw-r--r-- 1 root root 9692 Oct 3 16:28 aws-sdk-java-2.20.101.jar

Env

Error

Unexpected problem occured during version sanity check Reported exception: java.lang.NullPointerException at org.slf4j.LoggerFactory.versionSanityCheck(LoggerFactory.java:272) at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:126)

log4j:WARN Failed to set property [s3Region] to value "us-east-1". java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

Caused by: java.lang.ExceptionInInitializerError at com.amazonaws.regions.Region.getRegion(Region.java:60) at com.van.logging.aws.S3Configuration.resolveRegion(S3Configuration.java:176) at com.van.logging.aws.S3Configuration.setRegion(S3Configuration.java:117) at com.van.logging.log4j.Log4jAppender.setS3Region(Log4jAppender.java:146) ... 27 more Caused by: java.lang.NullPointerException at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:423) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657) at com.amazonaws.regions.RegionUtils.(RegionUtils.java:53) ... 31 more Exception in thread "main" java.lang.ExceptionInInitializerError at com.van.logging.aws.AwsClientHelpers.getCredentialsProvider(AwsClientHelpers.java:21) at com.van.logging.aws.AwsClientHelpers.buildClient(AwsClientHelpers.java:69) at com.van.logging.aws.S3PublishHelper.(S3PublishHelper.java:51) at com.van.logging.log4j.Log4jAppender.createCachePublisher(Log4jAppender.java:354) at com.van.logging.log4j.Log4jAppender.initStagingLog(Log4jAppender.java:33

Caused by: java.lang.NullPointerException at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:423) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)

bluedenim commented 2 weeks ago

I will take a look. However, log4j 1.x is no longer supported by most due to security risks. Try to move to log4j 2.x.

bluedenim commented 1 week ago

It may be due to the way we are setting the region, based on what I can see from the error.

Can you try configuring your region to "US_EAST_1" instead of "us-east-1"?

The values are documented here: https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/Regions.html#US_EAST_1

sontt710 commented 1 week ago

Hi @bluedenim ,

Thanks your responses, I tried to set region but it's still error

Error

Unexpected problem occured during version sanity check Reported exception: java.lang.NullPointerException at org.slf4j.LoggerFactory.versionSanityCheck(LoggerFactory.java:272) at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:126) at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:417) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657) at com.amazonaws.regions.RegionUtils.(RegionUtils.java:53) at com.amazonaws.regions.Region.getRegion(Region.java:60) at com.van.logging.aws.S3Configuration.resolveRegion(S3Configuration.java:206) at com.van.logging.aws.S3Configuration.setRegion(S3Configuration.java:125) at com.van.logging.log4j.Log4jAppender.setS3Region(Log4jAppender.java:148) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498)

log4j:WARN Failed to set property [s3Region] to value "AP_SOUTHEAST_1". java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.log4j.config.PropertySetter.setProperty(PropertySetter.java:245) at org.apache.log4j.config.PropertySetter.setProperty(PropertySetter.java:204) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:169) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) Caused by: java.lang.ExceptionInInitializerError at com.amazonaws.regions.Region.getRegion(Region.java:60) at com.van.logging.aws.S3Configuration.resolveRegion(S3Configuration.java:206) at com.van.logging.aws.S3Configuration.setRegion(S3Configuration.java:125) at com.van.logging.log4j.Log4jAppender.setS3Region(Log4jAppender.java:148) ... 27 more Caused by: java.lang.NullPointerException at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:423) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657) at com.amazonaws.regions.RegionUtils.(RegionUtils.java:53) ... 31 more Exception in thread "main" java.lang.ExceptionInInitializerError at com.van.logging.aws.AwsClientHelpers.getCredentialsProvider(AwsClientHelpers.java:37) at com.van.logging.aws.AwsClientHelpers.buildClient(AwsClientHelpers.java:71) at com.van.logging.aws.S3PublishHelper.(S3PublishHelper.java:51) at com.van.logging.log4j.Log4jAppender.createCachePublisher(Log4jAppender.java:395) at com.van.logging.log4j.Log4jAppender.initStagingLog(Log4jAppender.java:360) at com.van.logging.log4j.Log4jAppender.activateOptions(Log4jAppender.java:334) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)

sontt710 commented 1 week ago

This is full Error when I run a job

Error

Unexpected problem occured during version sanity check Reported exception: java.lang.NullPointerException at org.slf4j.LoggerFactory.versionSanityCheck(LoggerFactory.java:272) at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:126) at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:417) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657) at com.amazonaws.regions.RegionUtils.(RegionUtils.java:53) at com.amazonaws.regions.Region.getRegion(Region.java:60) at com.van.logging.aws.S3Configuration.resolveRegion(S3Configuration.java:206) at com.van.logging.aws.S3Configuration.setRegion(S3Configuration.java:125) at com.van.logging.log4j.Log4jAppender.setS3Region(Log4jAppender.java:148) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.log4j.config.PropertySetter.setProperty(PropertySetter.java:245) at org.apache.log4j.config.PropertySetter.setProperty(PropertySetter.java:204) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:169) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580) at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526) at org.apache.log4j.LogManager.(LogManager.java:127) at org.slf4j.impl.Log4jLoggerFactory.(Log4jLoggerFactory.java:66) at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:72) at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:45) at org.apache.spark.internal.Logging$.org$apache$spark$internal$Logging$$isLog4j12(Logging.scala:222) at org.apache.spark.internal.Logging.initializeLogging(Logging.scala:127) at org.apache.spark.internal.Logging.initializeLogIfNecessary(Logging.scala:111) at org.apache.spark.internal.Logging.initializeLogIfNecessary$(Logging.scala:105) at org.apache.spark.deploy.SparkSubmit.initializeLogIfNecessary(SparkSubmit.scala:75) at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:83) at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1043) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1052) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) log4j:WARN Failed to set property [s3Region] to value "AP_SOUTHEAST_1". java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.log4j.config.PropertySetter.setProperty(PropertySetter.java:245) at org.apache.log4j.config.PropertySetter.setProperty(PropertySetter.java:204) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:169) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580) at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526) at org.apache.log4j.LogManager.(LogManager.java:127) at org.slf4j.impl.Log4jLoggerFactory.(Log4jLoggerFactory.java:66) at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:72) at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:45) at org.apache.spark.internal.Logging$.org$apache$spark$internal$Logging$$isLog4j12(Logging.scala:222) at org.apache.spark.internal.Logging.initializeLogging(Logging.scala:127) at org.apache.spark.internal.Logging.initializeLogIfNecessary(Logging.scala:111) at org.apache.spark.internal.Logging.initializeLogIfNecessary$(Logging.scala:105) at org.apache.spark.deploy.SparkSubmit.initializeLogIfNecessary(SparkSubmit.scala:75) at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:83) at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1043) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1052) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) Caused by: java.lang.ExceptionInInitializerError at com.amazonaws.regions.Region.getRegion(Region.java:60) at com.van.logging.aws.S3Configuration.resolveRegion(S3Configuration.java:206) at com.van.logging.aws.S3Configuration.setRegion(S3Configuration.java:125) at com.van.logging.log4j.Log4jAppender.setS3Region(Log4jAppender.java:148) ... 27 more Caused by: java.lang.NullPointerException at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:423) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657) at com.amazonaws.regions.RegionUtils.(RegionUtils.java:53) ... 31 more Exception in thread "main" java.lang.ExceptionInInitializerError at com.van.logging.aws.AwsClientHelpers.getCredentialsProvider(AwsClientHelpers.java:37) at com.van.logging.aws.AwsClientHelpers.buildClient(AwsClientHelpers.java:71) at com.van.logging.aws.S3PublishHelper.(S3PublishHelper.java:51) at com.van.logging.log4j.Log4jAppender.createCachePublisher(Log4jAppender.java:395) at com.van.logging.log4j.Log4jAppender.initStagingLog(Log4jAppender.java:360) at com.van.logging.log4j.Log4jAppender.activateOptions(Log4jAppender.java:334) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580) at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526) at org.apache.log4j.LogManager.(LogManager.java:127) at org.slf4j.impl.Log4jLoggerFactory.(Log4jLoggerFactory.java:66) at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:72) at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:45) at org.apache.spark.internal.Logging$.org$apache$spark$internal$Logging$$isLog4j12(Logging.scala:222) at org.apache.spark.internal.Logging.initializeLogging(Logging.scala:127) at org.apache.spark.internal.Logging.initializeLogIfNecessary(Logging.scala:111) at org.apache.spark.internal.Logging.initializeLogIfNecessary$(Logging.scala:105) at org.apache.spark.deploy.SparkSubmit.initializeLogIfNecessary(SparkSubmit.scala:75) at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:83) at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1043) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1052) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) Caused by: java.lang.NullPointerException at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:423) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657) at com.amazonaws.auth.AWSCredentialsProviderChain.(AWSCredentialsProviderChain.java:41) ... 28 more

bluedenim commented 1 week ago

My guess is that you have a newer version of aws-java-sdk-s3 than the one I built with, and the way to set the region is now incompatible with how I did it.

The Log4j 1.x code is no longer supported, but I will take a look next week if I have time.

sontt710 commented 1 week ago

thanks @bluedenim

bluedenim commented 1 week ago

I didn't use any of the Spark libraries. However, I did run into a problem with a test program I had using:

        <dependency>
            <groupId>com.therealvan</groupId>
            <artifactId>appender-log4j</artifactId>
            <version>2.8.4</version>
            ...
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <version>1.12.772</version>
        </dependency> 

The error I got was:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/util/JacksonFeature

After adding this dependency to my sample program, however, things work with the region value "us-west-2":

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.17.1</version>
        </dependency>

So see if adding com.fasterxml.jackson.core:jackson-core:2.17.1 works for you.