diff --git a/README.md b/README.md index 9df61cad75..27ad97ee2a 100644 --- a/README.md +++ b/README.md @@ -93,11 +93,13 @@ Twilio.setEdge("sydney"); This will result in the `hostname` transforming from `api.twilio.com` to `api.sydney.au1.twilio.com`. ### Enable Debug Logging -In order to enable debug logging, create a configuration file named log4j2.xml that defines the logger at the root level to at least 'debug'. An example of the configuration file can be found [here](src/main/java/com/twilio/example/log4j2.xml). For more configuration options please see the log4j configuration [documentation](https://logging.apache.org/log4j/2.x/manual/configuration.html). -```java -Twilio.init(accountSid, authToken); -Twilio.setLoggerConfiguration("path/to/log4j2.xml"); -``` + +This library uses SLF4J for logging. Consult the SFL4J documentation +for information about logging configuration: + + http://slf4j.org/docs.html + +For example, if you are using `log4j`, make sure you have `slf4j-log4j12-1.X.XX.jar`, `log4j-1.X.XX.jar` and `slf4j-api-1.X.XX.jar` in your classpath and a `log4j.properties` file in the root of your project. ### Environment Variables diff --git a/pom.xml b/pom.xml index d120e94d4e..a4c4a03c75 100644 --- a/pom.xml +++ b/pom.xml @@ -209,6 +209,11 @@ jackson-datatype-jsr310 ${jackson.version} + + org.slf4j + slf4j-api + 1.7.30 + javax.xml.bind jaxb-api @@ -231,6 +236,12 @@ archunit 0.14.1 test + + + org.slf4j + slf4j-api + + nl.jqno.equalsverifier @@ -240,13 +251,15 @@ org.apache.logging.log4j - log4j-api - 2.14.0 - - - org.apache.logging.log4j - log4j-core + log4j-slf4j-impl 2.14.0 + test + + + org.slf4j + slf4j-api + + @@ -392,4 +405,4 @@ oss-parent 7 - \ No newline at end of file + diff --git a/src/main/java/com/twilio/Twilio.java b/src/main/java/com/twilio/Twilio.java index 2a90bcb49e..a362578462 100644 --- a/src/main/java/com/twilio/Twilio.java +++ b/src/main/java/com/twilio/Twilio.java @@ -14,9 +14,6 @@ import java.util.concurrent.Executors; import java.io.File; -import org.apache.logging.log4j.core.LoggerContext; -import org.apache.logging.log4j.LogManager; - /** * Singleton class to initialize Twilio environment. */ @@ -154,19 +151,6 @@ public static synchronized void setEdge(final String edge) { Twilio.edge = edge; } - /** - * Set the logger configuration file path. - * - * @param filePath path to logging configuration file - * @param loggerContext defaults to false to get the appropriate logger context for the caller. - */ - public static synchronized void setLoggerConfiguration(final String filePath, final boolean... loggerContext) { - boolean logContext = (loggerContext.length >= 1) ? loggerContext[0] : false; - LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(logContext); - File file = new File(filePath); - context.setConfigLocation(file.toURI()); - } - /** * Returns (and initializes if not initialized) the Twilio Rest Client. * diff --git a/src/main/java/com/twilio/http/TwilioRestClient.java b/src/main/java/com/twilio/http/TwilioRestClient.java index fcf91d4ad1..cbe32bc55e 100644 --- a/src/main/java/com/twilio/http/TwilioRestClient.java +++ b/src/main/java/com/twilio/http/TwilioRestClient.java @@ -3,14 +3,13 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.function.Predicate; import java.util.Map; import java.util.List; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.LoggerContext; - public class TwilioRestClient { public static final int HTTP_STATUS_CODE_CREATED = 201; @@ -25,7 +24,7 @@ public class TwilioRestClient { private final String region; private final String edge; private final HttpClient httpClient; - private static final Logger logger = LogManager.getLogger(); + private static final Logger logger = LoggerFactory.getLogger(TwilioRestClient.class); private TwilioRestClient(Builder b) { this.username = b.username; @@ -59,11 +58,14 @@ public Response request(final Request request) { logRequest(request); Response response = httpClient.reliableRequest(request); - logger.debug("status code: " + response.getStatusCode()); - org.apache.http.Header[] responseHeaders = response.getHeaders(); - logger.debug("response headers:"); - for (int i = 0; i < responseHeaders.length; i++) { - logger.debug(responseHeaders[i]); + + if (logger.isDebugEnabled()) { + logger.debug("status code: {}", response.getStatusCode()); + org.apache.http.Header[] responseHeaders = response.getHeaders(); + logger.debug("response headers:"); + for (int i = 0; i < responseHeaders.length; i++) { + logger.debug("responseHeader: {}", responseHeaders[i]); + } } return response; @@ -146,25 +148,28 @@ public TwilioRestClient build() { * Logging debug information about HTTP request. */ public void logRequest(final Request request) { - logger.debug("-- BEGIN Twilio API Request --"); - logger.debug("request method: " + request.getMethod()); - logger.debug("request URL: " + request.getUrl()); - final Map> queryParams = request.getQueryParams(); - final Map> headerParams = request.getHeaderParams(); - - if (!queryParams.isEmpty()) { - logger.debug("query parameters: " + queryParams); - } + if (logger.isDebugEnabled()) { + logger.debug("-- BEGIN Twilio API Request --"); + logger.debug("request method: " + request.getMethod()); + logger.debug("request URL: " + request.getUrl()); + final Map> queryParams = request.getQueryParams(); + final Map> headerParams = request.getHeaderParams(); + + if (queryParams != null && !queryParams.isEmpty()) { + logger.debug("query parameters: " + queryParams); + } - if (!headerParams.isEmpty()) { - logger.debug("header parameters: "); - for (String key : headerParams.keySet()) { - if (!key.toLowerCase().contains("authorization")) { - logger.debug(key + ": " + headerParams.get(key)); + if (headerParams != null && !headerParams.isEmpty()) { + logger.debug("header parameters: "); + for (String key : headerParams.keySet()) { + if (!key.toLowerCase().contains("authorization")) { + logger.debug(key + ": " + headerParams.get(key)); + } } } + + logger.debug("-- END Twilio API Request --"); } - logger.debug("-- END Twilio API Request --"); } } diff --git a/src/test/java/com/twilio/http/LoggingTest.java b/src/test/java/com/twilio/http/LoggingTest.java index 9760ff536d..eec141706e 100644 --- a/src/test/java/com/twilio/http/LoggingTest.java +++ b/src/test/java/com/twilio/http/LoggingTest.java @@ -2,7 +2,6 @@ import com.twilio.Twilio; import com.twilio.rest.Domains; -import com.twilio.rest.api.v2010.account.Message; import org.junit.Before; import org.junit.Test; import org.junit.Assert; @@ -11,8 +10,8 @@ import java.io.PrintStream; public class LoggingTest { + private static final PrintStream ORIGINAL_SYSTEM_OUT = System.out; private ByteArrayOutputStream output; - private PrintStream originalStream; @Before public void setUp() throws Exception { @@ -22,7 +21,6 @@ public void setUp() throws Exception { public void logCapturingSetup() { output = new ByteArrayOutputStream(); PrintStream outputStream = new PrintStream(output); - originalStream = System.out; System.setOut(outputStream); } @@ -30,13 +28,12 @@ public void finishLogCapturingSetup(Request request) { TwilioRestClient twilioRestClient = Twilio.getRestClient(); twilioRestClient.logRequest(request); System.out.flush(); - System.setOut(originalStream); + System.setOut(ORIGINAL_SYSTEM_OUT); } @Test public void testDebugLogging() { logCapturingSetup(); - Twilio.setLoggerConfiguration("src/main/java/com/twilio/example/log4j2.xml"); final Request request = new Request(HttpMethod.GET, Domains.API.toString(), "/2010-04-01/Accounts/AC123/Messages/MM123.json"); request.addHeaderParam("Authorization", "authorization value"); diff --git a/src/main/java/com/twilio/example/log4j2.xml b/src/test/resources/log4j2.xml similarity index 90% rename from src/main/java/com/twilio/example/log4j2.xml rename to src/test/resources/log4j2.xml index b29b207aca..b9405cb9c3 100644 --- a/src/main/java/com/twilio/example/log4j2.xml +++ b/src/test/resources/log4j2.xml @@ -1,5 +1,4 @@ -