diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..8b36d87
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,6 @@
+## 0.9.3
+
+* Added optional `LogRecord.zone` field.
+
+* Record current zone (or user specified zone) when creating new `LogRecord`s.
+
diff --git a/lib/logging.dart b/lib/logging.dart
index dc83d84..42344e8 100644
--- a/lib/logging.dart
+++ b/lib/logging.dart
@@ -138,16 +138,26 @@
    * If [message] is a [Function], it will be lazy evaluated. Additionally, if
    * [message] or its evaluated value is not a [String], then 'toString()' will
    * be called on it and the result will be logged.
+   *
+   * The log record will contain a field for the zone in which this call was
+   * made.
+   * This can be advantagous if a log listener wants to handle records of
+   * different zones differently (e.g. group log records by http-request if each
+   * http-request handler runs in it's own zone).
    */
-  void log(Level logLevel, message, [Object error, StackTrace stackTrace]) {
+  void log(Level logLevel,
+           message,
+           [Object error, StackTrace stackTrace, Zone zone]) {
     if (isLoggable(logLevel)) {
       // If message is a Function, evaluate it.
       if (message is Function) message = message();
       // If message is still not a String, call toString().
       if (message is! String) message = message.toString();
+      // Only record the current zone if it was not given.
+      if (zone == null) zone = Zone.current;
 
       var record = new LogRecord(logLevel, message, fullName, error,
-          stackTrace);
+          stackTrace, zone);
 
       if (hierarchicalLoggingEnabled) {
         var target = this;
@@ -314,8 +324,12 @@
   /** Associated stackTrace (if any) when recording errors messages. */
   final StackTrace stackTrace;
 
+  /** Zone of the calling code which resulted in this LogRecord. */
+  final Zone zone;
+
   LogRecord(this.level, this.message, this.loggerName, [this.error,
-                                                        this.stackTrace])
+                                                        this.stackTrace,
+                                                        this.zone])
       : time = new DateTime.now(),
         sequenceNumber = LogRecord._nextNumber++;
 
diff --git a/pubspec.yaml b/pubspec.yaml
index 5a0b86f..3867be5 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: logging
-version: 0.9.2
+version: 0.9.3
 author: Dart Team <misc@dartlang.org>
 description: >
   Provides APIs for debugging and error logging. This library introduces
diff --git a/test/logging_test.dart b/test/logging_test.dart
index 223498f..8eb116a 100644
--- a/test/logging_test.dart
+++ b/test/logging_test.dart
@@ -5,6 +5,8 @@
 
 library logging_test;
 
+import 'dart:async';
+
 import 'package:logging/logging.dart';
 import 'package:unittest/unittest.dart';
 
@@ -150,6 +152,53 @@
     expect(shout.stackTrace, isNull);
   });
 
+  group('zone gets recorded to LogRecord', () {
+    test('root zone', () {
+      var root = Logger.root;
+
+      var recordingZone = Zone.current;
+      var records = new List<LogRecord>();
+      root.onRecord.listen(records.add);
+      root.info('hello');
+
+      expect(records, hasLength(1));
+      expect(records.first.zone, equals(recordingZone));
+    });
+
+    test('child zone', () {
+      var root = Logger.root;
+
+      var recordingZone;
+      var records = new List<LogRecord>();
+      root.onRecord.listen(records.add);
+
+      runZoned(() {
+        recordingZone = Zone.current;
+        root.info('hello');
+      });
+
+      expect(records, hasLength(1));
+      expect(records.first.zone, equals(recordingZone));
+    });
+
+    test('custom zone', () {
+      var root = Logger.root;
+
+      var recordingZone;
+      var records = new List<LogRecord>();
+      root.onRecord.listen(records.add);
+
+      runZoned(() {
+        recordingZone = Zone.current;
+      });
+
+      runZoned(() => root.log(Level.INFO, 'hello', null, null, recordingZone));
+
+      expect(records, hasLength(1));
+      expect(records.first.zone, equals(recordingZone));
+    });
+  });
+
   group('mutating levels', () {
     Logger root = Logger.root;
     Logger a = new Logger('a');
