diff --git a/autoload/SpaceVim/api/logger.vim b/autoload/SpaceVim/api/logger.vim index dfd3e9ba2..ff4a212c7 100644 --- a/autoload/SpaceVim/api/logger.vim +++ b/autoload/SpaceVim/api/logger.vim @@ -3,48 +3,55 @@ let s:self = { \ 'name' : '', \ 'silent' : 1, \ 'file' : '', + \ 'temp' : [], \ } +let s:levels = ['Info', 'Warn', 'Error'] + function! SpaceVim#api#logger#get() abort return deepcopy(s:self) endfunction function! s:self.error(msg) abort - let time = strftime('%H:%M:%S') - let log = '[ ' . self.name . ' ] [' . time . '] [ Error ] ' . a:msg - if !self.silent - echoerr log - endif - call self.write(log) + let time = strftime('%H:%M:%S') + let log = '[ ' . self.name . ' ] [' . time . '] [ Error ] ' . a:msg + if !self.silent + echoerr log + endif + call self.write(log) endfunction function! s:self.write(msg) abort - if !isdirectory(fnamemodify(self.file, ':p:h')) - call mkdir(expand(fnamemodify(self.file, ':p:h')), 'p') - endif - let flags = filewritable(self.file) ? 'a' : '' - call writefile([a:msg], self.file, flags) + if empty(self.file) + call add(self.temp, a:msg) + return + endif + if !isdirectory(fnamemodify(self.file, ':p:h')) + call mkdir(expand(fnamemodify(self.file, ':p:h')), 'p') + endif + let flags = filewritable(self.file) ? 'a' : '' + call writefile([a:msg], self.file, flags) endfunction function! s:self.warn(msg) abort - let time = strftime('%H:%M:%S') - let log = '[ ' . self.name . ' ] [' . time . '] [ Warn ] ' . a:msg - if !self.silent - echohl WarningMsg - echom log - echohl None - endif - call self.write(log) + let time = strftime('%H:%M:%S') + let log = '[ ' . self.name . ' ] [' . time . '] [ Warn ] ' . a:msg + if !self.silent + echohl WarningMsg + echom log + echohl None + endif + call self.write(log) endfunction function! s:self.info(msg) abort - let time = strftime('%H:%M:%S') - let log = '[ ' . self.name . ' ] [' . time . '] [ Info ] ' . a:msg - if !self.silent - echom log - endif - call self.write(log) + let time = strftime('%H:%M:%S') + let log = '[ ' . self.name . ' ] [' . time . '] [ Info ] ' . a:msg + if !self.silent + echom log + endif + call self.write(log) endfunction function! s:self.set_name(name) abort @@ -58,3 +65,20 @@ endfunction function! s:self.set_file(file) abort let self.file = a:file endfunction + +function! s:self.view(l) abort + let info = '' + if filereadable(self.file) + let logs = readfile(self.file, '') + let info .= join(filter(logs, + \ "v:val =~# '\[ " . self.name . ' \] \[\d\d\:\d\d\:\d\d\] \[' + \ . s:levels[a:l] . "\]'"), "\n") + else + let info .= '[ ' . self.name . ' ] : logger file ' . self.file + \ . ' does not exists, only log for current process will be shown!' + let info .= join(filter(self.temp, + \ "v:val =~# '\[ SpaceVim \] \[\d\d\:\d\d\:\d\d\] \[" + \ . s:levels[a:l] . "\]'"), "\n") + endif + return info +endfunction