diff --git a/robolectric/src/main/java/org/robolectric/android/AndroidInterceptors.java b/robolectric/src/main/java/org/robolectric/android/AndroidInterceptors.java
index 8a2159e..51ea2a7 100644
--- a/robolectric/src/main/java/org/robolectric/android/AndroidInterceptors.java
+++ b/robolectric/src/main/java/org/robolectric/android/AndroidInterceptors.java
@@ -31,7 +31,7 @@
         new SystemTimeInterceptor(),
         new SystemArrayCopyInterceptor(),
         new LocaleAdjustLanguageCodeInterceptor(),
-        new SystemLogEInterceptor(),
+        new SystemLogInterceptor(),
         new NoOpInterceptor()
     );
   }
@@ -196,34 +196,45 @@
     }
   }
 
-  public static class SystemLogEInterceptor extends Interceptor {
-    public SystemLogEInterceptor() {
-      super(new MethodRef(System.class.getName(), "logE"));
+  /** AndroidInterceptor for System.logE and System.logW. */
+  public static class SystemLogInterceptor extends Interceptor {
+    public SystemLogInterceptor() {
+      super(
+          new MethodRef(System.class.getName(), "logE"),
+          new MethodRef(System.class.getName(), "logW"));
     }
 
     static void logE(Object... params) {
-      String message = "System.logE: ";
+      log("System.logE: ", params);
+    }
+
+    static void logW(Object... params) {
+      log("System.logW: ", params);
+    }
+
+    static void log(String prefix, Object... params) {
+      StringBuilder message = new StringBuilder(prefix);
       for (Object param : params) {
-        message += param.toString();
+        message.append(param.toString());
       }
       System.err.println(message);
     }
 
     @Override
     public Function<Object, Object> handle(MethodSignature methodSignature) {
-      return new Function<Object, Object>() {
-        @Override
-        public Object call(Class<?> theClass, Object value, Object[] params) {
+      return (theClass, value, params) -> {
+        if ("logE".equals(methodSignature.methodName)) {
           logE(params);
-          return null;
+        } else if ("logW".equals(methodSignature.methodName)) {
+          logW(params);
         }
+        return null;
       };
     }
 
     @Override
     public MethodHandle getMethodHandle(String methodName, MethodType type) throws NoSuchMethodException, IllegalAccessException {
-      return lookup.findStatic(getClass(), "logE",
-          methodType(void.class, Object[].class));
+      return lookup.findStatic(getClass(), methodName, methodType(void.class, Object[].class));
     }
   }
 
