import { Component, Vue, Watch } from 'vue-property-decorator'; import NavBar from '@/views/NavBar.vue'; import { logService, LogLevel, ApiLogAppender, ConsoleLogAppender } from '@/services/logging'; import { authStore } from '@/store'; import { User } from '@/models'; const logger = logService.getLogger('/app'); @Component({ components: { NavBar } }) export default class App extends Vue { private apiLogAppender!: ApiLogAppender; private consoleLogAppender!: ConsoleLogAppender; constructor() { super(); this.configureLoggers(); } private get authToken(): string | null { return authStore.authToken; } @Watch('authToken') private onAuthTokenChange(val: string | undefined , oldVal: string | undefined) { // If the user wasn't logged in initially, or their session expires, we // want to catch the new token for our API log appender. if (val) { this.apiLogAppender.authToken = val; } } private configureLoggers(): void { let commonLevel = LogLevel.WARN; if (LogLevel.hasOwnProperty(process.env.VUE_APP_LOG_LEVEL)) { commonLevel = (LogLevel[process.env.VUE_APP_LOG_LEVEL] as unknown) as LogLevel; } // Because modules like the router will start logging messages before this // component is initialized, the console appender is initialized and added // in main.ts this.consoleLogAppender = logService.ROOT_LOGGER.appenders[0]; // We create the API log appender (need credentials anyways) this.apiLogAppender = new ApiLogAppender( process.env.VUE_APP_PM_API_BASE + '/log/batch', this.authToken || '', // user may already be logged in and have a token LogLevel.WARN); logService.ROOT_LOGGER.appenders.push(this.apiLogAppender); if (LogLevel.hasOwnProperty(process.env.VUE_APP_API_LOG_LEVEL)) { this.apiLogAppender.threshold = (LogLevel[process.env.VUE_APP_API_LOG_LEVEL] as unknown) as LogLevel; } else { this.apiLogAppender.threshold = commonLevel; } if (LogLevel.hasOwnProperty(process.env.VUE_APP_CONSOLE_LOG_LEVEL)) { this.consoleLogAppender.threshold = (LogLevel[process.env.VUE_APP_CONSOLE_LOG_LEVEL] as unknown) as LogLevel; } else { this.consoleLogAppender.threshold = commonLevel; } const batchSize = parseInt(process.env.VUE_APP_API_LOG_BATCH_SIZE, 10); if (!isNaN(batchSize)) { this.apiLogAppender.batchSize = Math.max(batchSize, 1); } const minTimeInSec = parseInt(process.env.VUE_APP_API_LOG_MIN_TIME_PASSED_IN_SEC, 10); if (!isNaN(minTimeInSec)) { this.apiLogAppender.minimumTimePassedInSec = Math.max(minTimeInSec, 1); } } }