Reply
Highlighted
Contributor
Posts: 42
Registered: ‎09-26-2015

Using Log4j2 with AIM

[ Edited ]

Is Anet 1.9.9 SDK AIM compaitable with log4j2?

 

I have the logging set to where I want it using lig4j1 but I've upgraded to log4j2 and it doesn't seem like my settings are being recognized. I've included the following from the SDK resources log4j.properties in my log4j2.properties.  I've also tried replacing log4j with log4j2 below without success.  I still get warnings and info from the SDK even with the root level set to FATAL.

 

 

log4j.rootLogger.net.authorize.util.HttpClient=FATAL, R

 

 

 

Any help would be appreciated.

 

 

My full log4j2.properties:

 

rootLogger.level = fatal
rootLogger.appenderRefs = console, rolling
rootLogger.appenderRef.console.ref = STDOUT
rootLogger.appenderRef.rolling.ref = FILE


# Tell the root logger what appenders and level to use
appenders = console, rolling


##### Console Appender #####

appender.console.name = STDOUT
appender.console.type = Console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss z} %-5p %m%n


##### File Appender #####

appender.rolling.name = FILE
appender.rolling.type = RollingFile
appender.rolling.fileName = myfile.log
appender.rolling.filePattern = myfile.log
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss z} %-5p %m%n
appender.rolling.layout.type = PatternLayout
appender.rolling.policies.type = Policies
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 5MB
#appender.rolling.strategy.type = DefaultRolloverStrategy


##### Authorize.net #####

log4j2.rootlogger.net.authorize.util.HttpClient=FATAL, STDOUT

 

 

 

Highlighted
Contributor
Posts: 42
Registered: ‎09-26-2015

Re: Using Log4j2 with AIM

I contacted support but they couldn't find any documentation on ANet SDK logging.  I cross posted to Stack Overflow with more details.  Any help on this would be appretiated.

 

https://stackoverflow.com/questions/53897167/how-to-migrate-log4j1-properties-with-addtional-logger-...

Highlighted
Contributor
Posts: 42
Registered: ‎09-26-2015

Re: Using Log4j2 with AIM

It turns out that Authorize.Net is using commons-logging to abstract the logger implementation provided by log4j2.  commons-logging goes through a very specific process to determine which logger implementation to use and if one is not found the JDK's SimpleLogger is used.  In this specific case I was missing a critical log4j2 jar file that provided a String constructor needed by commons-logging, log4j-jcl.jar.  After including that on the classpath along with the api and core jars I am able to control Authorize.net's logging. 

Highlighted
Contributor
Posts: 42
Registered: ‎09-26-2015

Re: Using Log4j2 with AIM

[ Edited ]

For completeness, this is a log4j2.xml file that will allow you to control the log output of Authorize.net.  There seems  to be a problem with using or specifying logger configs in a .properties file so use the new log4j2.xml format instead.

Tip: In the XML file you can specify a root name for a logger and the settings will apply to all sub-classed loggers. As an example

<Logger name="org.apache.http">


Will apply to any logger that has that root as in:

<Logger name="org.apache.http.wire">
            - and -
<Logger name="org.apache.http.headers">



Here is the working log4j2.xml file that suppresses all debug messages for Authorize.net. Its a good example of overriding the root logger level:

 

<?xml version="1.0" encoding="UTF-8"?>

<Configuration>

  <Appenders>
    <Console name="console">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss z} %-5p %-5level %logger - %msg%n"/>
    </Console>

    <File name="file" fileName="mylogfile.log" append="true">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss z} %-5p %-5level %logger - %msg%n"/>
    </File >
  </Appenders>


  <Loggers>
    <Root level="DEBUG">
      <AppenderRef ref="console"/>
      <AppenderRef ref="file"/>
    </Root>

    <Logger name="org.apache.http" level="WARN" additivity="false">
      <AppenderRef ref="console"/>
      <AppenderRef ref="file"/>
    </Logger>

    <Logger name="net.authorize.util" level="WARN" additivity="false">
      <AppenderRef ref="console"/>
      <AppenderRef ref="file"/>
    </Logger>

    <Logger name="net.authorize.api" level="WARN" additivity="false">
      <AppenderRef ref="console"/>
      <AppenderRef ref="file"/>
    </Logger>
</Configuraion>