Skip to content

Commit add32fa

Browse files
system-logging: Create library to intercept and save console logs
1 parent 5ae8365 commit add32fa

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

src/libs/system-logging.ts

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import { format } from 'date-fns'
2+
import localforage from 'localforage'
3+
4+
export const cockpitSytemLogsDB = localforage.createInstance({
5+
driver: localforage.INDEXEDDB,
6+
name: 'Cockpit - System Logs',
7+
storeName: 'cockpit-system-logs-db',
8+
version: 1.0,
9+
description: 'Local backups of Cockpit system logs, to be retrieved in case of failure.',
10+
})
11+
12+
const initialTime = new Date()
13+
const fileName = `Cockpit (${format(initialTime, 'LLL dd, yyyy - HH꞉mm꞉ss O')}).syslog`
14+
15+
/* eslint-disable jsdoc/require-jsdoc */
16+
type LogEvent = {
17+
epoch: number
18+
level: string
19+
msg: string
20+
}
21+
22+
const initialDatetime = new Date()
23+
export interface SystemLog {
24+
initialDate: string
25+
initialTime: string
26+
events: LogEvent[]
27+
}
28+
29+
const currentSystemLog: SystemLog = {
30+
initialDate: format(initialDatetime, 'LLL dd, yyyy'),
31+
initialTime: format(initialDatetime, 'HH꞉mm꞉ss O'),
32+
events: [],
33+
}
34+
/* eslint-enable jsdoc/require-jsdoc */
35+
36+
const saveLogEventInDB = (event: LogEvent): void => {
37+
currentSystemLog.events.push(event)
38+
cockpitSytemLogsDB.setItem(fileName, currentSystemLog)
39+
}
40+
41+
const oldConsoleError = window.console.error
42+
window.console.error = (o) => {
43+
oldConsoleError(o)
44+
saveLogEventInDB({ epoch: new Date().getTime(), level: 'error', msg: o })
45+
}
46+
47+
const oldConsoleWarn = window.console.warn
48+
window.console.warn = (o) => {
49+
oldConsoleWarn(o)
50+
saveLogEventInDB({ epoch: new Date().getTime(), level: 'warn', msg: o })
51+
}
52+
53+
const oldConsoleInfo = window.console.info
54+
window.console.info = (o) => {
55+
oldConsoleInfo(o)
56+
saveLogEventInDB({ epoch: new Date().getTime(), level: 'info', msg: o })
57+
}
58+
59+
const oldConsoleDebug = window.console.debug
60+
window.console.debug = (o) => {
61+
oldConsoleDebug(o)
62+
saveLogEventInDB({ epoch: new Date().getTime(), level: 'debug', msg: o })
63+
}
64+
65+
const oldConsoleTrace = window.console.trace
66+
window.console.trace = (o) => {
67+
oldConsoleTrace(o)
68+
saveLogEventInDB({ epoch: new Date().getTime(), level: 'trace', msg: o })
69+
}
70+
71+
const oldConsoleLog = window.console.log
72+
window.console.log = (o) => {
73+
oldConsoleLog(o)
74+
saveLogEventInDB({ epoch: new Date().getTime(), level: 'Log', msg: o })
75+
}

src/main.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'floating-vue/dist/style.css'
22
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
3+
import '@/libs/system-logging'
34

45
import { library } from '@fortawesome/fontawesome-svg-core'
56
import { far } from '@fortawesome/free-regular-svg-icons'

0 commit comments

Comments
 (0)