     }
     
     @discardableResult
-    public func measure(_ label: String? = nil, _ block: () -> Void) -> Double {
+    public func measure(_ label: String? = nil, _ block: () throws -> Void) rethrows -> Double {
         let precision = 3.0
         let dec = pow(10.0, precision)
         

    
    public let id: Id
    public var level: Level
    public private(set) var handlers: [FileHandle]
    public weak var bypass: Logger? = nil
    
    private init(_ id: Id) {
        self.id = id
        self.level = .warning
        self.handlers = [FileHandle.standardOutput]
    }
    
    public static func get(_ id: Id) -> Logger {

    public func log(level: Level = .info, _ msg: @autoclosure () -> String) {
        if level >= self.level {
            let label = "\(id)\( level > .info ? ":\(level)" : "" )"
            let date = dateFormatter.string(from: Date())
            let str = "\(date) [\(label)] \(msg())\n"
            write(str)
        }
    }
