Fix: Daily log file not adding newlines to logs, Add: Config log page loads last 5000 logs for the current day #72

This commit is contained in:
advplyr 2021-10-31 19:10:45 -05:00
parent 6ccde8f66f
commit 8ca6c62a03
8 changed files with 87 additions and 54 deletions

View file

@ -4,7 +4,6 @@ const fs = require('fs-extra')
const DailyLog = require('./objects/DailyLog')
const Logger = require('./Logger')
const { getFileSize } = require('./utils/fileUtils')
const TAG = '[LogManager]'
@ -50,14 +49,16 @@ class LogManager {
if (this.dailyLogFiles.includes(currentDailyLogFilename)) {
Logger.debug(TAG, `Daily log file already exists - set in Logger`)
this.currentDailyLog.loadLogs()
await this.currentDailyLog.loadLogs()
} else {
this.dailyLogFiles.push(this.currentDailyLog.filename)
}
// Log buffered Logs
if (this.dailyLogBuffer.length) {
this.dailyLogBuffer.forEach((logObj) => this.currentDailyLog.appendLog(logObj))
this.dailyLogBuffer.forEach((logObj) => {
this.currentDailyLog.appendLog(logObj)
})
this.dailyLogBuffer = []
}
}
@ -68,7 +69,7 @@ class LogManager {
if (dailyFiles && dailyFiles.length) {
dailyFiles.forEach((logFile) => {
if (Path.extname(logFile) === '.txt') {
Logger.info('Daily Log file found', logFile)
Logger.debug('Daily Log file found', logFile)
this.dailyLogFiles.push(logFile)
} else {
Logger.debug(TAG, 'Unknown File in Daily log files dir', logFile)
@ -120,5 +121,14 @@ class LogManager {
// Append log line to log file
this.currentDailyLog.appendLog(logObj)
}
socketRequestDailyLogs(socket) {
if (!this.currentDailyLog) {
return
}
var lastLogs = this.currentDailyLog.logs.slice(-5000)
socket.emit('daily_logs', lastLogs)
}
}
module.exports = LogManager

View file

@ -3,7 +3,7 @@ const { LogLevel } = require('./utils/constants')
class Logger {
constructor() {
this.logLevel = process.env.NODE_ENV === 'production' ? LogLevel.INFO : LogLevel.TRACE
this.logFileLevel = LogLevel.INFO
// this.logFileLevel = LogLevel.INFO
this.socketListeners = []
this.logManager = null
@ -60,7 +60,7 @@ class Logger {
level
}
if (level >= this.logFileLevel && this.logManager) {
if (level >= this.logLevel && this.logManager) {
this.logManager.logToFile(logObj)
}

View file

@ -260,6 +260,7 @@ class Server {
// Logs
socket.on('set_log_listener', (level) => Logger.addSocketListener(socket, level))
socket.on('fetch_daily_logs', () => this.logManager.socketRequestDailyLogs(socket))
// Backups
socket.on('create_backup', () => this.backupManager.requestCreateBackup(socket))

View file

@ -60,15 +60,14 @@ class DailyLog {
var oneBigLog = ''
buffered.forEach((logLine) => {
oneBigLog += logLine + '\n'
oneBigLog += logLine
})
this.appendLogLine(oneBigLog)
}
async appendLog(logObj) {
this.logs.push(logObj)
var line = JSON.stringify(logObj)
var line = JSON.stringify(logObj) + '\n'
this.appendLogLine(line)
}
@ -97,16 +96,31 @@ class DailyLog {
}
var text = await readTextFile(this.fullPath)
var hasFailures = false
this.logs = text.split(/\r?\n/).map(t => {
if (!t) {
hasFailures = true
return null
}
try {
return JSON.parse(t)
} catch (err) {
console.error('Failed to parse log line', t, err)
hasFailures = true
return null
}
}).filter(l => !!l)
Logger.info(`[DailyLog] ${this.id}: Loaded ${this.logs.length} Logs`)
// Rewrite log file to remove errors
if (hasFailures) {
var newLogLines = this.logs.map(l => JSON.stringify(l)).join('\n') + '\n'
await fs.writeFile(this.fullPath, newLogLines)
console.log('Re-Saved log file to remove bad lines')
}
Logger.debug(`[DailyLog] ${this.id}: Loaded ${this.logs.length} Logs`)
}
}
module.exports = DailyLog