Log Cleanup

This commit is contained in:
Garth Vander Houwen 2024-07-30 13:48:08 -07:00
parent 65e8ae4071
commit 447d82030a
5 changed files with 106 additions and 73 deletions

View file

@ -5052,9 +5052,6 @@
},
"Debug Log" : {
},
"Debug Logs" : {
},
"Debug Logs%@" : {

View file

@ -670,7 +670,7 @@ func telemetryPacket(packet: MeshPacket, connectedNode: Int64, context: NSManage
telemetry.voltage = telemetryMessage.deviceMetrics.voltage
telemetry.uptimeSeconds = Int32(telemetryMessage.deviceMetrics.uptimeSeconds)
telemetry.metricsType = 0
Logger.statistics.info("📈 [Mesh Statistics] Channel Utilization: \(telemetryMessage.deviceMetrics.channelUtilization, privacy: .public) Airtime: \(telemetryMessage.deviceMetrics.airUtilTx, privacy: .public) for Node: \(packet.from.toHex(), privacy: .public))")
Logger.statistics.info("📈 [Mesh Statistics] Channel Utilization: \(telemetryMessage.deviceMetrics.channelUtilization, privacy: .public) Airtime: \(telemetryMessage.deviceMetrics.airUtilTx, privacy: .public) for Node: \(packet.from.toHex(), privacy: .public)")
} else if telemetryMessage.variant == Telemetry.OneOf_Variant.environmentMetrics(telemetryMessage.environmentMetrics) {
// Environment Metrics
telemetry.barometricPressure = telemetryMessage.environmentMetrics.barometricPressure

View file

@ -9,7 +9,7 @@ import SwiftUI
import OSLog
/// Needed for TableColumnForEach
@available(iOS 17.4, macOS 14.4, *)
@available(iOS 17.0, macOS 14.0, *)
struct AppLog: View {
@State private var logs: [OSLogEntryLog] = []
@ -33,60 +33,101 @@ struct AppLog: View {
.secondFraction(.fractional(3))
var body: some View {
Table(logs, selection: $selection, sortOrder: $sortOrder) {
if idiom != .phone {
TableColumn("log.time") { value in
Text(value.date.formatted(dateFormatStyle))
}
.width(min: 125, max: 150)
TableColumn("log.level") { value in
Text(value.level.description)
.foregroundStyle(value.level.color)
}
.width(min: 85, max: 110)
TableColumn("log.category", value: \.category)
.width(min: 80, max: 130)
}
TableColumn("log.message", value: \.composedMessage) { value in
Text(value.composedMessage)
.foregroundStyle(value.level.color)
.font(idiom == .phone ? .caption : .body)
}
.width(ideal: 200, max: .infinity)
}
.monospaced()
.safeAreaInset(edge: .bottom, alignment: .trailing) {
HStack {
Button(action: {
withAnimation {
isEditingFilters = !isEditingFilters
HStack {
if idiom == .phone {
Table(logs, selection: $selection, sortOrder: $sortOrder) {
TableColumn("log.message", value: \.composedMessage) { value in
Text(value.composedMessage)
.foregroundStyle(value.level.color)
.font(idiom == .phone ? .caption : .body)
}
}) {
Image(systemName: !isEditingFilters ? "line.3.horizontal.decrease.circle" : "line.3.horizontal.decrease.circle.fill")
.padding(.vertical, 5)
.width(ideal: 200, max: .infinity)
}
.monospaced()
.safeAreaInset(edge: .bottom, alignment: .trailing) {
HStack {
Button(action: {
withAnimation {
isEditingFilters = !isEditingFilters
}
}) {
Image(systemName: !isEditingFilters ? "line.3.horizontal.decrease.circle" : "line.3.horizontal.decrease.circle.fill")
.padding(.vertical, 5)
}
.tint(Color(UIColor.secondarySystemBackground))
.foregroundColor(.accentColor)
.buttonStyle(.borderedProminent)
}
.controlSize(.regular)
.padding(5)
}
.padding(.bottom, 5)
.padding(.trailing, 5)
.searchable(text: $searchText, placement: .navigationBarDrawer, prompt: "Search")
.disabled(selection != nil)
.overlay {
if logs.isEmpty {
ContentUnavailableView("No Logs Available", systemImage: "scroll")
}
}
.refreshable {
await logs = searchAppLogs()
logs.sort(using: sortOrder)
}
} else {
Table(logs, selection: $selection, sortOrder: $sortOrder) {
TableColumn("log.time") { value in
Text(value.date.formatted(dateFormatStyle))
}
.width(min: 125, max: 150)
TableColumn("log.level") { value in
Text(value.level.description)
.foregroundStyle(value.level.color)
}
.width(min: 85, max: 110)
TableColumn("log.category", value: \.category)
.width(min: 80, max: 130)
TableColumn("log.message", value: \.composedMessage) { value in
Text(value.composedMessage)
.foregroundStyle(value.level.color)
.font(idiom == .phone ? .caption : .body)
}
.width(ideal: 200, max: .infinity)
}
.monospaced()
.safeAreaInset(edge: .bottom, alignment: .trailing) {
HStack {
Button(action: {
withAnimation {
isEditingFilters = !isEditingFilters
}
}) {
Image(systemName: !isEditingFilters ? "line.3.horizontal.decrease.circle" : "line.3.horizontal.decrease.circle.fill")
.padding(.vertical, 5)
}
.tint(Color(UIColor.secondarySystemBackground))
.foregroundColor(.accentColor)
.buttonStyle(.borderedProminent)
}
.controlSize(.regular)
.padding(5)
}
.padding(.bottom, 5)
.padding(.trailing, 5)
.searchable(text: $searchText, placement: .navigationBarDrawer, prompt: "Search")
.disabled(selection != nil)
.overlay {
if logs.isEmpty {
ContentUnavailableView("No Logs Available", systemImage: "scroll")
}
}
.refreshable {
await logs = searchAppLogs()
logs.sort(using: sortOrder)
}
.tint(Color(UIColor.secondarySystemBackground))
.foregroundColor(.accentColor)
.buttonStyle(.borderedProminent)
}
.controlSize(.regular)
.padding(5)
}
.padding(.bottom, 5)
.padding(.trailing, 5)
.searchable(text: $searchText, placement: .navigationBarDrawer, prompt: "Search")
.disabled(selection != nil)
.overlay {
if logs.isEmpty {
ContentUnavailableView("No Logs Available", systemImage: "scroll")
}
}
.refreshable {
await logs = searchAppLogs()
logs.sort(using: sortOrder)
}
.onChange(of: sortOrder) { _, sortOrder in
withAnimation {
@ -176,7 +217,7 @@ struct AppLog: View {
}
}
@available(iOS 17.4, macOS 14.4, *)
@available(iOS 17.0, macOS 14.0, *)
extension AppLog {
@MainActor
private func searchAppLogs() async -> [OSLogEntryLog] {

View file

@ -18,7 +18,7 @@ struct MeshLog: View {
let url = logFile!
logs.removeAll()
var lineCount = 0
let lineLimit = 1000
let lineLimit = 10000
// Get the number of lines
for try await _ in url.lines {
lineCount += 1

View file

@ -243,20 +243,12 @@ struct Settings: View {
var loggingSection: some View {
Section(header: Text("logging")) {
NavigationLink(value: SettingsNavigationState.meshLog) {
Label {
Text("mesh.log")
} icon: {
Image(systemName: "list.bullet.rectangle")
}
}
if #available (iOS 17.4, *) {
if #available (iOS 17.0, *) {
NavigationLink(value: SettingsNavigationState.debugLogs) {
Label {
Text("Debug Logs")
Text("Logs")
} icon: {
Image(systemName: "stethoscope")
Image(systemName: "scroll")
}
}
}
@ -265,6 +257,13 @@ struct Settings: View {
var developersSection: some View {
Section(header: Text("Developers")) {
NavigationLink(value: SettingsNavigationState.meshLog) {
Label {
Text("mesh.log")
} icon: {
Image(systemName: "list.bullet.rectangle")
}
}
NavigationLink(value: SettingsNavigationState.appFiles) {
Label {
Text("App Files")
@ -469,17 +468,13 @@ struct Settings: View {
case .telemetry:
TelemetryConfig(node: node)
case .meshLog:
#if DEBUG
MeshLog()
#endif
case .debugLogs:
if #available(iOS 17.4, *) {
AppLog()
}
case .appFiles:
#if DEBUG
AppData()
#endif
case .firmwareUpdates:
Firmware(node: node)
}