From 546d1e91e24350bec6bbd2d2a3a031b503190bb8 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Fri, 23 Feb 2018 23:12:06 -0500 Subject: [PATCH] log service implementation --- jslib | 2 +- src/app/services/services.module.ts | 4 ++ src/main.ts | 5 ++- src/services/log.service.ts | 59 +++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 src/services/log.service.ts diff --git a/jslib b/jslib index 9adabdab..b747830c 160000 --- a/jslib +++ b/jslib @@ -1 +1 @@ -Subproject commit 9adabdab483aa463e38382bebdad40305f4974f1 +Subproject commit b747830c5b4360bf50d6e02126ebaab24e3028d5 diff --git a/src/app/services/services.module.ts b/src/app/services/services.module.ts index 090e74f2..fef47216 100644 --- a/src/app/services/services.module.ts +++ b/src/app/services/services.module.ts @@ -11,6 +11,7 @@ import { DesktopPlatformUtilsService } from '../../services/desktopPlatformUtils import { DesktopRendererMessagingService } from '../../services/desktopRendererMessaging.service'; import { DesktopRendererSecureStorageService } from '../../services/desktopRendererSecureStorage.service'; import { DesktopStorageService } from '../../services/desktopStorage.service'; +import { LogService } from '../../services/log.service'; import { I18nService } from '../../services/i18n.service'; import { AuthGuardService } from './auth-guard.service'; @@ -49,6 +50,7 @@ import { EnvironmentService as EnvironmentServiceAbstraction } from 'jslib/abstr import { FolderService as FolderServiceAbstraction } from 'jslib/abstractions/folder.service'; import { I18nService as I18nServiceAbstraction } from 'jslib/abstractions/i18n.service'; import { LockService as LockServiceAbstraction } from 'jslib/abstractions/lock.service'; +import { LogService as LogServiceAbstraction } from 'jslib/abstractions/log.service'; import { MessagingService as MessagingServiceAbstraction } from 'jslib/abstractions/messaging.service'; import { PasswordGenerationService as PasswordGenerationServiceAbstraction, @@ -63,6 +65,7 @@ import { TotpService as TotpServiceAbstraction } from 'jslib/abstractions/totp.s import { UserService as UserServiceAbstraction } from 'jslib/abstractions/user.service'; import { UtilsService as UtilsServiceAbstraction } from 'jslib/abstractions/utils.service'; +const logService = new LogService(); const i18nService = new I18nService(window.navigator.language, './locales'); const utilsService = new UtilsService(); const stateService = new StateService(); @@ -161,6 +164,7 @@ function initFactory(): Function { { provide: LockServiceAbstraction, useValue: lockService }, { provide: StorageServiceAbstraction, useValue: storageService }, { provide: StateServiceAbstraction, useValue: stateService }, + { provide: LogServiceAbstraction, useValue: logService }, { provide: APP_INITIALIZER, useFactory: initFactory, diff --git a/src/main.ts b/src/main.ts index a5458c77..04a61568 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,6 +4,7 @@ import * as path from 'path'; import { DesktopMainMessagingService } from './services/desktopMainMessaging.service'; import { DesktopStorageService } from './services/desktopStorage.service'; import { I18nService } from './services/i18n.service'; +import { LogService } from './services/log.service'; import { MenuMain } from './main/menu.main'; import { MessagingMain } from './main/messaging.main'; @@ -15,6 +16,7 @@ import { WindowMain } from './main/window.main'; const osLocale = require('os-locale'); export class Main { + logService: LogService; i18nService: I18nService; storageService: DesktopStorageService; messagingService: DesktopMainMessagingService; @@ -38,8 +40,8 @@ export class Main { if (appDataPath != null) { app.setPath('userData', appDataPath); - app.setPath('logs', path.join(appDataPath, 'logs')); } + app.setPath('logs', path.join(app.getPath('userData'), 'logs')); const args = process.argv.slice(1); const watch = args.some((val) => val === '--watch'); @@ -49,6 +51,7 @@ export class Main { require('electron-reload')(__dirname, {}); } + this.logService = new LogService(null, app.getPath('logs')); this.i18nService = new I18nService('en', './locales/'); this.storageService = new DesktopStorageService(); this.messagingService = new DesktopMainMessagingService(this); diff --git a/src/services/log.service.ts b/src/services/log.service.ts new file mode 100644 index 00000000..c8b7199f --- /dev/null +++ b/src/services/log.service.ts @@ -0,0 +1,59 @@ +import log from 'electron-log'; +import * as path from 'path'; + +import { isDev } from '../scripts/utils'; + +import { LogLevelType } from 'jslib/enums/logLevelType'; + +import { LogService as LogServiceAbstraction } from 'jslib/abstractions/log.service'; + +export class LogService implements LogServiceAbstraction { + constructor(private filter: (level: LogLevelType) => boolean = null, logDir: string = null) { + if (logDir != null) { + log.transports.file.file = path.join(logDir, 'app.log'); + } + } + + debug(message: string) { + if (!isDev()) { + return; + } + + this.write(LogLevelType.Debug, message); + } + + info(message: string) { + this.write(LogLevelType.Info, message); + } + + warning(message: string) { + this.write(LogLevelType.Warning, message); + } + + error(message: string) { + this.write(LogLevelType.Error, message); + } + + write(level: LogLevelType, message: string) { + if (this.filter != null && this.filter(level)) { + return; + } + + switch (level) { + case LogLevelType.Debug: + log.debug(message); + break; + case LogLevelType.Info: + log.info(message); + break; + case LogLevelType.Warning: + log.warn(message); + break; + case LogLevelType.Error: + log.error(message); + break; + default: + break; + } + } +}