diff --git a/Sources/DLog/LogInterval.swift b/Sources/DLog/LogInterval.swift index b007410..d254c6a 100644 --- a/Sources/DLog/LogInterval.swift +++ b/Sources/DLog/LogInterval.swift @@ -74,19 +74,19 @@ public struct IntervalConfig { /// Accumulated interval statistics public struct IntervalStatistics { /// A number of total calls - public var count = 0 + public let count: Int /// A total time duration of all calls - public var total: TimeInterval = 0 + public let total: TimeInterval /// A minimum time duration - public var min: TimeInterval = 0 + public let min: TimeInterval /// A maximum time duration - public var max: TimeInterval = 0 + public let max: TimeInterval /// An average time duration - public var average: TimeInterval = 0 + public let average: TimeInterval } fileprivate class StatisticsStore { @@ -100,7 +100,7 @@ fileprivate class StatisticsStore { if let data = intervals[id] { return data } - let data = IntervalStatistics() + let data = IntervalStatistics(count: 0, total: 0, min: 0, max: 0, average: 0) intervals[id] = data return data } @@ -192,27 +192,26 @@ public class LogInterval: LogItem { time = Date() // Statistics - var statistics = self.statistics - statistics.count += 1 - statistics.total += duration - if statistics.min == 0 || statistics.min > duration { - statistics.min = duration - } - if statistics.max == 0 || statistics.max < duration { - statistics.max = duration - } - statistics.average = statistics.total / Double(statistics.count) + let stats = self.statistics + let count = stats.count + 1 + let total = stats.total + duration + let newStats = IntervalStatistics( + count: count, + total: total, + min: stats.min == 0 || stats.min > duration ? duration : stats.min, + max: stats.max == 0 || stats.max < duration ? duration : stats.max, + average: total / Double(count)) - StatisticsStore.shared[id] = statistics + StatisticsStore.shared[id] = newStats // Metadata let items: [(IntervalOptions, String, () -> Any)] = [ - (.average, "average", { stringFromTimeInterval(statistics.average) }), - (.count, "count", { statistics.count }), + (.average, "average", { stringFromTimeInterval(newStats.average) }), + (.count, "count", { newStats.count }), (.duration, "duration", { stringFromTimeInterval(self.duration) }), - (.max, "max", { stringFromTimeInterval(statistics.max) }), - (.min, "min", { stringFromTimeInterval(statistics.min) }), - (.total, "total", { stringFromTimeInterval(statistics.total) }), + (.max, "max", { stringFromTimeInterval(newStats.max) }), + (.min, "min", { stringFromTimeInterval(newStats.min) }), + (.total, "total", { stringFromTimeInterval(newStats.total) }), ] let metadata = Metadata.metadata(from: items, options: config.intervalConfig.options) self.metadata = _metadata() + [metadata] diff --git a/Sources/DLog/LogItem.swift b/Sources/DLog/LogItem.swift index dc64e12..78f5a7f 100644 --- a/Sources/DLog/LogItem.swift +++ b/Sources/DLog/LogItem.swift @@ -42,14 +42,14 @@ public class LogLocation: NSObject { public let line: UInt /// The module name. - public lazy var moduleName: String = { + public var moduleName: String { (fileID as NSString).pathComponents.first! - }() + } /// The file name. - public lazy var fileName: String = { + public var fileName: String { (file as NSString).lastPathComponent - }() + } public init(_ fileID: String, _ file: String, _ function: String, _ line: UInt) { self.fileID = fileID @@ -116,13 +116,13 @@ public class LogItem: NSObject { private let _message: () -> LogMessage /// Text of this log message. - public lazy var message: String = { _message().text }() + public private(set) lazy var message: String = { _message().text }() let config: LogConfig let _metadata: () -> [Metadata] /// Metadata of log message - public lazy var metadata: [Metadata] = { _metadata() }() + public internal(set) lazy var metadata: [Metadata] = { _metadata() }() init(message: @escaping () -> LogMessage, type: LogType, category: String, config: LogConfig, scope: LogScope?, metadata: @escaping () -> [Metadata], location: LogLocation) { self._message = message