Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion StikJIT.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -655,4 +655,4 @@
/* End XCConfigurationList section */
};
rootObject = DC6F1D2F2D94EADD0071B2B6 /* Project object */;
}
}
91 changes: 91 additions & 0 deletions StikJIT/Utilities/LogManager.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
//
// LogManager.swift
// StikJIT
//
// Created by neoarz on 3/29/25.
//

import Foundation

class LogManager: ObservableObject {
static let shared = LogManager()

@Published var logs: [LogEntry] = []
@Published var errorCount: Int = 0

struct LogEntry: Identifiable {
let id = UUID()
let timestamp: Date
let type: LogType
let message: String

enum LogType: String {
case info = "INFO"
case error = "ERROR"
case debug = "DEBUG"
case warning = "WARNING"
}
}

private init() {
// Add initial system info logs
addInfoLog("StikJIT starting up")
addInfoLog("Initializing environment")
}

func addLog(message: String, type: LogEntry.LogType) {
//clean dumb stuff
var cleanMessage = message

// Clean up common prefixes that match the log type
let prefixesToRemove = [
"Info: ", "INFO: ", "Information: ",
"Error: ", "ERROR: ", "ERR: ",
"Debug: ", "DEBUG: ", "DBG: ",
"Warning: ", "WARN: ", "WARNING: "
]

for prefix in prefixesToRemove {
if cleanMessage.hasPrefix(prefix) {
cleanMessage = String(cleanMessage.dropFirst(prefix.count))
break
}
}

DispatchQueue.main.async {
self.logs.append(LogEntry(timestamp: Date(), type: type, message: cleanMessage))

if type == .error {
self.errorCount += 1
}

// Keep log size manageable
if self.logs.count > 1000 {
self.logs.removeFirst(100)
}
}
}

func addInfoLog(_ message: String) {
addLog(message: message, type: .info)
}

func addErrorLog(_ message: String) {
addLog(message: message, type: .error)
}

func addDebugLog(_ message: String) {
addLog(message: message, type: .debug)
}

func addWarningLog(_ message: String) {
addLog(message: message, type: .warning)
}

func clearLogs() {
DispatchQueue.main.async {
self.logs.removeAll()
self.errorCount = 0
}
}
}
32 changes: 32 additions & 0 deletions StikJIT/Utilities/LogManagerBridge.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
//
// LogManagerBridge.swift
// StikJIT
//
// Created by neoarz on 3/29/25.
//

import Foundation
//objc bridge for logs
@objc class LogManagerBridge: NSObject {
@objc static let shared = LogManagerBridge()

private override init() {
super.init()
}

@objc func addInfoLog(_ message: String) {
LogManager.shared.addInfoLog(message)
}

@objc func addErrorLog(_ message: String) {
LogManager.shared.addErrorLog(message)
}

@objc func addDebugLog(_ message: String) {
LogManager.shared.addDebugLog(message)
}

@objc func addWarningLog(_ message: String) {
LogManager.shared.addWarningLog(message)
}
}
Loading