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 @@
-