     
     // TODO: log "Tic..." message by default
     /**
-    Log the given event and start tracking the time until the next call to `toc:`.
-
-    - parameter message: The message to be logged, provided by an autoclosure for lazy evaluation (see `log:forLevel:`)
-    - parameter logLevel: The event's log level (see `log:forLevel:`)
-    - parameter timerKey: Provide as an identifier in nested calls to `tic:` and `toc:`.
-    */
-    public func tic<M>(@autoclosure(escaping) andLog message: () -> M, forLevel logLevel: LogLevel? = nil, timerKey: String? = nil, function: String = #function, file: String = #file, line: Int = #line)
+     Log the given event and start tracking the time until the next call to `toc:`.
+     
+     - parameter message: The message to be logged, provided by an autoclosure for lazy evaluation (see `log:forLevel:`)
+     - parameter logLevel: The event's log level (see `log:forLevel:`)
+     - parameter timerKey: Provide as an identifier in nested calls to `tic:` and `toc:`.
+     */
+    public func tic<M>(@autoclosure(escaping) andLog message: () -> M, error: ErrorType? = nil, forLevel logLevel: LogLevel? = nil, timerKey: String? = nil, function: String = #function, file: String = #file, line: Int = #line)
     {
         if let timerKey = timerKey {
             startDates[timerKey] = NSDate()
         } else {
             defaultStartDate = NSDate()
         }
-        self.log(message, forLevel: logLevel, function: function, file: file, line: line)
+        self.log(message, error: error, forLevel: logLevel, function: function, file: file, line: line)
     }
     
     // TODO: log "...Toc" message by default
     /// When called after a preceding call to `tic:`, the elapsed time between both calls will be appended to the record. See `tic:` for documentation and usage of the `timerKey` parameter in nested calls to `tic:` and `toc:`.
-    public func toc<M>(@autoclosure(escaping) andLog message: () -> M, forLevel logLevel: LogLevel? = nil, timerKey: String? = nil, function: String = #function, file: String = #file, line: Int = #line)
+    public func toc<M>(@autoclosure(escaping) andLog message: () -> M, error: ErrorType? = nil, forLevel logLevel: LogLevel? = nil, timerKey: String? = nil, function: String = #function, file: String = #file, line: Int = #line)
     {
         var startDate: NSDate?
         if let timerKey = timerKey {

            return self.defaultLogger()
        }
    }

    /// Returns a logger with a given key path relative to the receiver.
    public func childForKeyPath(keyPath: KeyPath) -> Logger {
        let (key, remainingKeyPath) = keyPath.popFirst()

            }
        }
    }
    
    
    // MARK: Logging
    
    /**
     Logs the event given by its `message` and additional information that is gathered automatically. The `logLevel` parameter in conjunction with the logger's `effectiveLogLevel` determines, if the event will be handled or ignored.
     
     - parameter message: The message to be logged, provided by an autoclosure. The closure will not be evaluated if the event is not going to be emitted, so it can contain expensive operations only needed for logging purposes.
     - parameter logLevel: If the event's log level is lower than the receiving logger's `effectiveLogLevel`, the event will not be logged. The event will always be logged, if no log level is provided for either the event or the logger's `effectiveLogLevel`.
     */
    public func log<M>(@autoclosure(escaping) message: () -> M, error: ErrorType? = nil, forLevel logLevel: LogLevel? = nil, function: String = #function, file: String = #file, line: Int = #line)
    {
        let event = Event(logger: self, message: message, error: error, logLevel: logLevel, date: NSDate(), elapsedTime: nil, function: function, file: file, line: line)
