diff --git a/lib/src/async/logs.dart b/lib/src/async/logs.dart
index 58fa3ca..3611d14 100644
--- a/lib/src/async/logs.dart
+++ b/lib/src/async/logs.dart
@@ -14,6 +14,7 @@
 
 import 'dart:async';
 
+import 'package:webdriver/src/common/exception.dart';
 import 'package:webdriver/src/common/log.dart';
 import 'package:webdriver/src/common/request_client.dart';
 import 'package:webdriver/src/common/webdriver_handler.dart';
@@ -32,8 +33,8 @@
       for (var entry in entries) {
         yield entry;
       }
-    } on UnsupportedError {
-      // Produces no entries for W3C/Firefox.
+    } on UnknownCommandException {
+      // Produces no entries for Firefox.
     }
   }
 
diff --git a/lib/src/handler/w3c_handler.dart b/lib/src/handler/w3c_handler.dart
index 932a2b0..913a778 100644
--- a/lib/src/handler/w3c_handler.dart
+++ b/lib/src/handler/w3c_handler.dart
@@ -1,5 +1,6 @@
 import 'dart:convert';
 
+import 'package:webdriver/src/common/log.dart';
 import 'package:webdriver/src/common/request.dart';
 import 'package:webdriver/src/common/webdriver_handler.dart';
 import 'package:webdriver/src/handler/w3c/alert.dart';
@@ -54,8 +55,7 @@
   TimeoutsHandler timeouts = W3cTimeoutsHandler();
 
   @override
-  LogsHandler get logs =>
-      throw UnsupportedError('Unsupported for W3cWebDriverHandler');
+  LogsHandler get logs => W3cLogsHandler();
 
   @override
   WebDriverRequest buildGeneralRequest(HttpMethod method, String uri,
@@ -71,3 +71,15 @@
   @override
   String toString() => 'W3C';
 }
+
+class W3cLogsHandler extends LogsHandler {
+  @override
+  WebDriverRequest buildGetLogsRequest(String logType) =>
+      WebDriverRequest.postRequest('log', {'type': logType});
+
+  @override
+  List<LogEntry> parseGetLogsResponse(WebDriverResponse response) =>
+      parseW3cResponse(response)
+          .map<LogEntry>((e) => LogEntry.fromMap(e))
+          .toList();
+}
diff --git a/lib/src/sync/logs.dart b/lib/src/sync/logs.dart
index 59962ae..4a51473 100644
--- a/lib/src/sync/logs.dart
+++ b/lib/src/sync/logs.dart
@@ -12,6 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+import 'package:webdriver/src/common/exception.dart';
 import 'package:webdriver/src/common/log.dart';
 import 'package:webdriver/src/common/request_client.dart';
 import 'package:webdriver/src/common/webdriver_handler.dart';
@@ -26,8 +27,8 @@
     try {
       return _client.send(_handler.logs.buildGetLogsRequest(logType),
           _handler.logs.parseGetLogsResponse);
-    } on UnsupportedError {
-      // Produces no entries for W3C/Firefox.
+    } on UnknownCommandException {
+      // Produces no entries for Firefox.
       return <LogEntry>[];
     }
   }
diff --git a/test/async_logs_test.dart b/test/async_logs_test.dart
index bf38610..c885891 100644
--- a/test/async_logs_test.dart
+++ b/test/async_logs_test.dart
@@ -44,7 +44,12 @@
 
     test('get logs', () async {
       List<LogEntry> logs = await driver.logs.get(LogType.performance).toList();
-      expect(logs.length, greaterThan(0));
+      if (driver.capabilities['browserName'] == 'firefox') {
+        expect(logs, isEmpty);
+        return;
+      }
+
+      expect(logs, isNotEmpty);
       logs.forEach((entry) {
         expect(entry.level, equals(LogLevel.info));
       });
diff --git a/test/sync/logs.dart b/test/sync/logs.dart
index 4689d52..fd30fb9 100644
--- a/test/sync/logs.dart
+++ b/test/sync/logs.dart
@@ -44,7 +44,12 @@
 
     test('get logs', () {
       List<LogEntry> logs = driver.logs.get(LogType.performance).toList();
-      expect(logs.length, greaterThan(0));
+      if (driver.capabilities['browserName'] == 'firefox') {
+        expect(logs, isEmpty);
+        return;
+      }
+
+      expect(logs, isNotEmpty);
       logs.forEach((entry) {
         expect(entry.level, equals(LogLevel.info));
       });
