Skip to content

Commit 4ad071c

Browse files
authored
Merge pull request #3 from mitchtreece/dev
1.3.0 Release
2 parents 6e58880 + 9d252ca commit 4ad071c

File tree

12 files changed

+174
-60
lines changed

12 files changed

+174
-60
lines changed

Demo/Demo/AppDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
1515
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
1616

1717
// Lumberjack
18-
18+
1919
Lumberjack.buildAndRegister(loggerWithId: "custom") { logger in
2020

2121
logger.symbol = .just("📱")

Demo/Demo/CustomHook.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import Lumberjack
99

1010
struct CustomHook: MessageHook {
1111

12-
func hook(_ message: Message) -> MessageHookResult {
12+
func hook(message: Message,
13+
from logger: Logger) -> MessageHookResult {
1314

1415
if ((0...10).randomElement() ?? 0) == 10 {
1516
print("🎲 [LUCKY] Custom hook says: \"you feelin lucky punk?\" 🤠")

README.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ as-well-as equivalent logger instance counterparts:
6565

6666
```swift
6767
LOG(...) logger.log(...)
68+
PROXY(...) logger.proxy(...)
69+
TRACE(...) logger.trace(...)
6870
DEBUG(...) logger.debug(...)
6971
INFO(...) logger.info(...)
7072
NOTICE(...) logger.notice(...)
@@ -81,7 +83,7 @@ The top-level `Lumberjack` object houses several global settings, as-well-as eas
8183

8284
```swift
8385
Lumberjack
84-
.verbosity = .just(.error)
86+
.verbosityOverride = .just(.error)
8587

8688
Lumberjack
8789
.defaultLogger
@@ -153,6 +155,7 @@ class CustomViewController: UIViewController {
153155

154156
self.logger = Logger { make in
155157

158+
make.verbosity = .full
156159
make.symbol = .just("📱")
157160
make.category = "CustomView"
158161
make.components = .simple
@@ -245,7 +248,8 @@ import Lumberjack
245248

246249
struct SaveMessageHook: MessageHook {
247250

248-
func hook(_ message: Message) -> MessageHookResult {
251+
func hook(message: Message,
252+
from logger: Logger) -> MessageHookResult {
249253

250254
save(message)
251255
return .next
@@ -292,7 +296,8 @@ import Lumberjack
292296

293297
struct PrintMessageHook: MessageHook {
294298

295-
func hook(_ message: Message) -> MessageHookResult {
299+
func hook(message: Message,
300+
from logger: Logger) -> MessageHookResult {
296301

297302
if shouldPrint(message) {
298303

Sources/Lumberjack/Hooks/Hooks/GuardHook.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@ public struct GuardHook: MessageHook {
2424
self.condition = condition
2525
}
2626

27-
public func hook(_ message: Message) -> MessageHookResult {
27+
public func hook(message: Message,
28+
from logger: Logger) -> MessageHookResult {
29+
2830
return self.condition(message) ? .next : .stop
31+
2932
}
3033

3134
}

Sources/Lumberjack/Hooks/Hooks/_PrintHook.swift

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,14 @@ internal struct _PrintHook: MessageHook {
1313
return "Print"
1414
}
1515

16-
func hook(_ message: Message) -> MessageHookResult {
16+
func hook(message: Message,
17+
from logger: Logger) -> MessageHookResult {
1718

18-
if shouldPrint(message) {
19+
if shouldPrint(message, from: logger) {
1920

21+
// TODO: Migrate to OSLog, or let the user decide
22+
// between a logging system: print _or_ OSLog
23+
2024
print(message.body(formatted: true))
2125

2226
return .next
@@ -27,9 +31,14 @@ internal struct _PrintHook: MessageHook {
2731

2832
}
2933

30-
private func shouldPrint(_ message: Message) -> Bool {
34+
private func shouldPrint(_ message: Message,
35+
from logger: Logger) -> Bool {
36+
37+
let verbosity = (Lumberjack.verbosityOverride != nil) ?
38+
Lumberjack.verbosityOverride! :
39+
logger.configuration.verbosity
3140

32-
switch Lumberjack.verbosity {
41+
switch verbosity {
3342
case .none:
3443

3544
return false

Sources/Lumberjack/Hooks/MessageHook.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@ public protocol MessageHook {
1919
///
2020
/// - Parameters:
2121
/// - message: The hooked message.
22+
/// - logger: The source logger instance.
2223
///
2324
/// - Returns: A continuation result that either passes the
2425
/// message onto additional hooks, _or_ stops the chain and
2526
/// prevents the message from being logged.
26-
func hook(_ message: Message) -> MessageHookResult
27+
func hook(message: Message,
28+
from logger: Logger) -> MessageHookResult
2729

2830
}
2931

Sources/Lumberjack/LogLevel.swift

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,26 @@ public enum LogLevel: Int, Identifiable, Comparable, CaseIterable {
1414
return lhs.rawValue < rhs.rawValue
1515
}
1616

17+
/// A trace log level.
18+
case trace = 0
19+
1720
/// A debug log level.
18-
case debug = 0
21+
case debug = 1
1922

2023
/// An info log level.
21-
case info = 1
24+
case info = 2
2225

2326
/// A notice log level.
24-
case notice = 2
27+
case notice = 3
2528

2629
/// A warning log level.
27-
case warning = 3
30+
case warning = 4
2831

2932
/// An error log level.
30-
case error = 4
33+
case error = 5
3134

3235
/// A fatal log level.
33-
case fatal = 5
36+
case fatal = 6
3437

3538
/// The log level's identifier.
3639
public var id: Int {
@@ -40,6 +43,7 @@ public enum LogLevel: Int, Identifiable, Comparable, CaseIterable {
4043
internal var name: String {
4144

4245
switch self {
46+
case .trace: return "trace"
4347
case .debug: return "debug"
4448
case .info: return "info"
4549
case .notice: return "notice"
@@ -53,6 +57,7 @@ public enum LogLevel: Int, Identifiable, Comparable, CaseIterable {
5357
internal var symbol: String {
5458

5559
switch self {
60+
case .trace: return "🟤"
5661
case .debug: return "⚪️"
5762
case .info: return "🟣"
5863
case .notice: return "🟡"
@@ -66,12 +71,13 @@ public enum LogLevel: Int, Identifiable, Comparable, CaseIterable {
6671
internal var systemImageName: String {
6772

6873
switch self {
69-
case .debug: return "0.circle"
70-
case .info: return "1.circle"
71-
case .notice: return "2.circle"
72-
case .warning: return "3.circle"
73-
case .error: return "4.circle"
74-
case .fatal: return "5.circle"
74+
case .trace: return "0.circle"
75+
case .debug: return "1.circle"
76+
case .info: return "2.circle"
77+
case .notice: return "3.circle"
78+
case .warning: return "4.circle"
79+
case .error: return "5.circle"
80+
case .fatal: return "6.circle"
7581
}
7682

7783
}

Sources/Lumberjack/LogVerbosity.swift

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//
2+
// File.swift
3+
//
4+
//
5+
// Created by Mitch Treece on 12/7/23.
6+
//
7+
8+
import Foundation
9+
10+
/// Representation of the various logger verbosity modes.
11+
public enum LogVerbosity {
12+
13+
/// An empty (none) verbosity mode.
14+
case none
15+
16+
/// A verbosity mode over a single log level.
17+
case just(LogLevel)
18+
19+
/// A verbosity mode up-to (and including) a log level.
20+
///
21+
/// ```
22+
/// .upTo(.notice) == [.trace, .debug, .info, .notice]
23+
/// ```
24+
case upTo(LogLevel)
25+
26+
/// A verbosity mode up-from (and including) a log level.
27+
/// ```
28+
/// .upFrom(.warning) == [.warning, .error]
29+
/// ```
30+
case upFrom(LogLevel)
31+
32+
/// A full verbosity mode.
33+
case full
34+
35+
}

Sources/Lumberjack/Logger/Logger+Builder.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ public extension Logger /* Builder */ {
1313
/// configurable components of a logger.
1414
struct Builder {
1515

16+
/// The logger's verbosity mode.
17+
public var verbosity: LogVerbosity?
18+
1619
/// The logger's symbol.
1720
public var symbol: LogSymbol?
1821

@@ -55,6 +58,7 @@ public extension Logger /* Builder */ {
5558
let defaultConfig = Configuration()
5659

5760
var config = Configuration()
61+
config.verbosity = builder.verbosity ?? defaultConfig.verbosity
5862
config.symbol = builder.symbol ?? defaultConfig.symbol
5963
config.category = builder.category ?? defaultConfig.category
6064
config.components = builder.components ?? defaultConfig.components

Sources/Lumberjack/Logger/Logger+Configuration.swift

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ public extension Logger /* Configuration */ {
1313
/// configurable components of a logger.
1414
struct Configuration {
1515

16+
/// The logger's verbosity mode.
17+
public var verbosity: LogVerbosity
18+
1619
/// The logger's symbol.
1720
public var symbol: LogSymbol
1821

@@ -22,32 +25,35 @@ public extension Logger /* Configuration */ {
2225
/// The logger's message components.
2326
public var components: MessageComponentSet
2427

28+
/// The logger's message hooks.
29+
public var hooks = [any MessageHook]()
30+
2531
/// The logger's timestamp format.
2632
public var timestampFormat: String {
2733
didSet {
2834
updateDateFormatter()
2935
}
3036
}
3137

32-
/// The logger's hooks.
33-
public var hooks = [any MessageHook]()
34-
3538
internal let dateFormatter = DateFormatter()
3639

3740
/// Initializes a logger configuration.
3841
///
3942
/// - Parameters:
43+
/// - verbosity: The logger's verbosity mode.
4044
/// - symbol: The logger's symbol.
4145
/// - category: The logger's category.
4246
/// - components: The logger's message components.
4347
/// - timestampFormat: The logger's timestamp format.
44-
/// - hooks: The logger's hooks.
45-
public init(symbol: LogSymbol = .default,
48+
/// - hooks: The logger's message hooks.
49+
public init(verbosity: LogVerbosity = .full,
50+
symbol: LogSymbol = .default,
4651
category: String? = nil,
4752
components: MessageComponentSet = .default,
4853
timestampFormat: String = "yyyy-MM-dd'T'HH:mm:ss.SSS",
4954
hooks: [any MessageHook] = []) {
5055

56+
self.verbosity = verbosity
5157
self.symbol = symbol
5258
self.category = category
5359
self.components = components

Sources/Lumberjack/Logger/Logger.swift

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,10 @@ public class Logger: Equatable {
113113

114114
for hook in hooks {
115115

116-
let result = hook
117-
.hook(_message)
116+
let result = hook.hook(
117+
message: _message,
118+
from: self
119+
)
118120

119121
_message.append(
120122
hook: hook.name,
@@ -167,6 +169,37 @@ public class Logger: Equatable {
167169

168170
}
169171

172+
/// Logs a trace message.
173+
///
174+
/// - Parameters:
175+
/// - message: The message to log.
176+
/// - symbol: An override symbol to use for the message.
177+
/// - category: An override category to use for the message.
178+
/// - file: The calling function.
179+
/// - function: The calling function.
180+
/// - line: The calling line number.
181+
///
182+
/// - Returns: The logged message.
183+
@discardableResult
184+
public func trace(_ message: String,
185+
symbol: String? = nil,
186+
category: String? = nil,
187+
file: String = #fileID,
188+
function: String = #function,
189+
line: UInt = #line) -> Message {
190+
191+
return log(
192+
message,
193+
level: .trace,
194+
symbol: symbol,
195+
category: category,
196+
file: file,
197+
function: function,
198+
line: line
199+
)
200+
201+
}
202+
170203
/// Logs a debug message.
171204
///
172205
/// - Parameters:

0 commit comments

Comments
 (0)