Skip to content

Commit c11066a

Browse files
📝 feat(logging): Add emoji-based logging system
- Add file name, line number and function name to logs\n- Implement emoji-based log categories\n- Add utility functions for consistent logging
1 parent 63dcc3b commit c11066a

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

boringNotch/utils/Logger.swift

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import Foundation
2+
import SwiftUI
3+
4+
enum LogCategory: String {
5+
case lifecycle = "🔄"
6+
case memory = "💾"
7+
case performance = "⚡️"
8+
case ui = "🎨"
9+
case network = "🌐"
10+
case error = ""
11+
case warning = "⚠️"
12+
case success = ""
13+
case debug = "🔍"
14+
}
15+
16+
struct Logger {
17+
static func log(
18+
_ message: String,
19+
category: LogCategory,
20+
file: String = #file,
21+
function: String = #function,
22+
line: Int = #line
23+
) {
24+
let fileName = (file as NSString).lastPathComponent
25+
let timestamp = ISO8601DateFormatter().string(from: Date())
26+
print("\(category.rawValue) [\(timestamp)] [\(fileName):\(line)] \(function) - \(message)")
27+
}
28+
29+
static func trackMemory(
30+
file: String = #file,
31+
function: String = #function,
32+
line: Int = #line
33+
) {
34+
var info = mach_task_basic_info()
35+
var count = mach_msg_type_number_t(MemoryLayout<mach_task_basic_info>.size)/4
36+
37+
let kerr: kern_return_t = withUnsafeMutablePointer(to: &info) {
38+
$0.withMemoryRebound(to: integer_t.self, capacity: 1) {
39+
task_info(mach_task_self_,
40+
task_flavor_t(MACH_TASK_BASIC_INFO),
41+
$0,
42+
&count)
43+
}
44+
}
45+
46+
if kerr == KERN_SUCCESS {
47+
let usedMB = Double(info.resident_size) / 1024.0 / 1024.0
48+
log(String(format: "Memory used: %.2f MB", usedMB),
49+
category: .memory,
50+
file: file,
51+
function: function,
52+
line: line)
53+
}
54+
}
55+
}
56+
57+
extension View {
58+
func trackLifecycle(_ identifier: String) -> some View {
59+
self.modifier(ViewLifecycleTracker(identifier: identifier))
60+
}
61+
}
62+
63+
struct ViewLifecycleTracker: ViewModifier {
64+
let identifier: String
65+
66+
func body(content: Content) -> some View {
67+
content
68+
.onAppear {
69+
Logger.log("\(identifier) appeared", category: .lifecycle)
70+
Logger.trackMemory()
71+
}
72+
.onDisappear {
73+
Logger.log("\(identifier) disappeared", category: .lifecycle)
74+
Logger.trackMemory()
75+
}
76+
}
77+
}

0 commit comments

Comments
 (0)