Skip to content

Commit afdb01f

Browse files
authored
Merge pull request #7 from VishwaiOSDev/feature/vishwa/enabled-context-logging
Customized LoggerKit
2 parents b1a5c93 + a33bac9 commit afdb01f

File tree

5 files changed

+165
-90
lines changed

5 files changed

+165
-90
lines changed

Package.swift

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,10 @@ let package = Package(
77
name: "LoggerKit",
88
platforms: [.iOS(.v13), .watchOS(.v6), .macOS(.v10_15), .tvOS(.v13)],
99
products: [
10-
// Products define the executables and libraries a package produces, and make them visible to other packages.
1110
.library(name: "LoggerKit", targets: ["LoggerKit"]),
1211
],
13-
dependencies: [
14-
// Dependencies declare other packages that this package depends on.
15-
// .package(url: /* package url */, from: "1.0.0"),
16-
],
12+
dependencies: [],
1713
targets: [
18-
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
19-
// Targets can depend on other targets in this package, and on products in packages this package depends on.
2014
.target(name: "LoggerKit", dependencies: []),
2115
.testTarget(name: "LoggerKitTests", dependencies: ["LoggerKit"]),
2216
]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// Loggable+Extension.swift
3+
//
4+
//
5+
// Created by Vishweshwaran on 19/02/23.
6+
//
7+
8+
import Foundation
9+
10+
extension Loggable {
11+
12+
public static var logTag: String {
13+
return String(describing: self)
14+
}
15+
16+
public static var logConfig: LoggerKit.LoggerConfig {
17+
get { return Self.logConfig }
18+
set { Self.logConfig = newValue }
19+
}
20+
}

Sources/LoggerKit/LoggerKit+Extension.swift

Lines changed: 0 additions & 56 deletions
This file was deleted.

Sources/LoggerKit/LoggerKit.swift

Lines changed: 138 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@
77

88
import Foundation
99

10-
public enum Logger: Loggable {
10+
public protocol Loggable {
11+
static var logTag: String { get }
12+
static var logConfig: LoggerKit.LoggerConfig { get set }
13+
}
14+
15+
public struct LoggerKit {
1116

12-
enum LogLevel {
13-
14-
case verbose, info, debug, warning, error
17+
enum LogLevel: Int {
18+
case verbose = 0, info, debug, warning, error
1519
case `init`, `deinit`
1620

1721
fileprivate var prefix: String {
@@ -33,34 +37,150 @@ public enum Logger: Loggable {
3337
let line: Int
3438

3539
var description: String {
36-
guard let file else { return "\(line)" }
40+
guard let file = file else { return "\(line)" }
3741
return "\((file as NSString).lastPathComponent): \(line)"
3842
}
3943
}
4044

41-
static func handleLog(level: LogLevel, message: Any?..., shouldLogContext: Bool, context: Context) {
42-
var logComponents: [String] = []
45+
public struct LoggerConfig {
4346

44-
if shouldLogContext {
45-
if level == .`init` || level == .deinit {
46-
logComponents.append("\t\t\t \(level.prefix)")
47-
} else {
48-
logComponents.append(level.prefix)
49-
}
47+
let enable: Bool
48+
let severity: LoggerKit.LogLevel
49+
50+
init(enable: Bool, severity: LoggerKit.LogLevel = .info) {
51+
self.enable = enable
52+
self.severity = severity
53+
}
54+
55+
func shouldLog(_ level: LoggerKit.LogLevel) -> Bool {
56+
return level.rawValue >= self.severity.rawValue
5057
}
58+
}
59+
}
5160

52-
logComponents.append("\(context.description) -")
61+
public extension Loggable {
62+
63+
static func info(_ message: Any..., shouldLogContext: Bool = true, file: String = #file, line: Int = #line) {
64+
let context = LoggerKit.Context(file: file, line: line)
65+
handleLog(
66+
level: .info,
67+
message: formatLogMessage(message),
68+
shouldLogContext: shouldLogContext,
69+
context: context,
70+
logTag: logTag,
71+
logConfig: logConfig
72+
)
73+
}
74+
75+
static func verbose(_ message: Any..., shouldLogContext: Bool = true, file: String = #file, line: Int = #line) {
76+
let context = LoggerKit.Context(file: file, line: line)
77+
handleLog(
78+
level: .verbose,
79+
message: formatLogMessage(message),
80+
shouldLogContext: shouldLogContext,
81+
context: context,
82+
logTag: logTag,
83+
logConfig: logConfig
84+
)
85+
}
86+
87+
static func debug(_ message: Any..., shouldLogContext: Bool = true, file: String = #file, line: Int = #line) {
88+
let context = LoggerKit.Context(file: file, line: line)
89+
handleLog(
90+
level: .debug,
91+
message: formatLogMessage(message),
92+
shouldLogContext: shouldLogContext,
93+
context: context,
94+
logTag: logTag,
95+
logConfig: logConfig
96+
)
97+
}
98+
99+
static func warning(_ message: Any..., shouldLogContext: Bool = true, file: String = #file, line: Int = #line) {
100+
let context = LoggerKit.Context(file: file, line: line)
101+
handleLog(
102+
level: .warning,
103+
message: formatLogMessage(message),
104+
shouldLogContext: shouldLogContext,
105+
context: context,
106+
logTag: logTag,
107+
logConfig: logConfig
108+
)
109+
}
110+
111+
static func error(_ message: Any..., shouldLogContext: Bool = true, file: String = #file, line: Int = #line) {
112+
let context = LoggerKit.Context(file: file, line: line)
113+
handleLog(
114+
level: .error,
115+
message: formatLogMessage(message),
116+
shouldLogContext: shouldLogContext,
117+
context: context,
118+
logTag: logTag,
119+
logConfig: logConfig
120+
)
121+
}
122+
123+
static func initialize(_ message: Any..., shouldLogContext: Bool = false, file: String = #file, line: Int = #line) {
124+
let context = LoggerKit.Context(file: file, line: line)
125+
handleLog(
126+
level: .`init`,
127+
message: formatLogMessage(message),
128+
shouldLogContext: shouldLogContext,
129+
context: context,
130+
logTag: logTag,
131+
logConfig: logConfig
132+
)
133+
}
134+
135+
static func teardown(_ message: Any..., shouldLogContext: Bool = false, file: String = #file, line: Int = #line) {
136+
let context = LoggerKit.Context(file: file, line: line)
137+
handleLog(
138+
level: .deinit,
139+
message: formatLogMessage(message),
140+
shouldLogContext: shouldLogContext,
141+
context: context,
142+
logTag: logTag,
143+
logConfig: logConfig
144+
)
145+
}
146+
}
147+
148+
extension Loggable {
149+
150+
private static func handleLog(
151+
level: LoggerKit.LogLevel,
152+
message: String,
153+
shouldLogContext: Bool,
154+
context: LoggerKit.Context,
155+
logTag: String,
156+
logConfig: LoggerKit.LoggerConfig
157+
) {
158+
guard logConfig.enable else { return }
159+
guard logConfig.shouldLog(level) else { return }
53160

54-
message.forEach { message in
55-
if let message {
56-
logComponents.append(String(describing: message))
57-
}
161+
var logComponents: [String] = []
162+
163+
let logFormat = "\(level.prefix) [\(logTag)]"
164+
165+
switch level {
166+
case .`init`, .deinit:
167+
logComponents.append("\t\t\t \(logFormat):")
168+
default:
169+
logComponents.append(logFormat)
58170
}
59171

172+
if shouldLogContext { logComponents.append("\(context.description) -") }
173+
174+
logComponents.append(message)
175+
60176
let fullString = logComponents.joined(separator: " ")
61177

62178
#if DEBUG
63179
print(fullString)
64180
#endif
65181
}
182+
183+
private static func formatLogMessage(_ message: Any...) -> String {
184+
message.map { String(describing: $0) }.joined(separator: " ")
185+
}
66186
}

Tests/LoggerKitTests/LoggerKitTests.swift

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ import XCTest
33

44
final class LogKitTests: XCTestCase {
55

6+
struct Logger: Loggable {
7+
static var logTag: String = "LoggerKitTests"
8+
static var logConfig: LoggerKit.LoggerConfig = .init(enable: true)
9+
}
10+
611
func testInitLog() {
712
Logger.initialize("LogKitTest Init")
813
}
@@ -16,7 +21,7 @@ final class LogKitTests: XCTestCase {
1621
}
1722

1823
func testDebugLog() {
19-
Logger.debug("Debug mode enabled")
24+
Logger.debug("Debug Mode")
2025
}
2126

2227
func testWarningLog() {
@@ -49,14 +54,6 @@ final class LogKitTests: XCTestCase {
4954
Logger.verbose("Something went wrong! \(errorMessage)")
5055
}
5156

52-
func testLogWithoutParameter() {
53-
Logger.error()
54-
Logger.info()
55-
Logger.debug()
56-
Logger.warning()
57-
Logger.verbose()
58-
}
59-
6057
func testWithComplexObjects() {
6158

6259
struct LogTest {

0 commit comments

Comments
 (0)