diff --git a/.gitignore b/.gitignore
index 94cd3d1fd..905c5d503 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@ doc/tags
*-rplugin~
*rplugin.vim
/config/local.vim
+.SpaceVim.log
diff --git a/BingSiteAuth.xml b/BingSiteAuth.xml
index f130d5ab9..04a43a6cf 100644
--- a/BingSiteAuth.xml
+++ b/BingSiteAuth.xml
@@ -1,4 +1,4 @@
14716157352C631AD40087A3D69C499B
-
\ No newline at end of file
+
diff --git a/autoload/SpaceVim.vim b/autoload/SpaceVim.vim
index 65b228c5b..bfdb1d631 100644
--- a/autoload/SpaceVim.vim
+++ b/autoload/SpaceVim.vim
@@ -84,6 +84,16 @@ let g:spacevim_plugin_manager = 'dein' " neobundle or dein or vim-plug
" let g:spacevim_checkinstall = 0
" <
let g:spacevim_checkinstall = 1
+""
+" Enable/Disable debug mode for SpaceVim, by default it is disabled.
+"
+" to enable it: >
+" let g:spacevim_enable_debug = 1
+" <
+let g:spacevim_enable_debug = 0
+""
+" Set the debug level of SpaceVim, by default it is 1.
+let g:spacevim_debug_level = 1
let g:spacevim_hiddenfileinfo = 1
let g:spacevim_plugin_groups_exclude = []
""
diff --git a/autoload/SpaceVim/logger.vim b/autoload/SpaceVim/logger.vim
new file mode 100644
index 000000000..1cf7b303f
--- /dev/null
+++ b/autoload/SpaceVim/logger.vim
@@ -0,0 +1,67 @@
+let s:logger_level = g:spacevim_debug_level
+let s:levels = ['Info', 'Warn', 'Error']
+let s:logger_file = expand('~/.SpaceVim/.SpaceVim.log')
+
+""
+" @public
+" Set debug level of SpaceVim, by default it is 1. all message will be logged.
+"
+" 1 : log all the message.
+"
+" 2 : log warning and error message
+"
+" 3 : log error message only
+function! SpaceVim#logger#setLevel(level) abort
+ let s:logger_level = a:level
+endfunction
+
+function! SpaceVim#logger#info(msg) abort
+ if g:spacevim_enable_debug && s:logger_level <= 1
+ call s:wite(s:warpMsg(a:msg, 1))
+ endif
+endfunction
+
+function! SpaceVim#logger#warn(msg) abort
+ if g:spacevim_enable_debug && s:logger_level <= 2
+ call s:wite(s:warpMsg(a:msg, 2))
+ endif
+endfunction
+
+function! SpaceVim#logger#error(msg) abort
+ if g:spacevim_enable_debug && s:logger_level <= 3
+ call s:wite(s:warpMsg(a:msg, 3))
+ endif
+endfunction
+
+function! s:wite(msg) abort
+ let flags = filewritable(s:logger_file) ? 'a' : ''
+ call writefile([a:msg], s:logger_file, flags)
+endfunction
+
+
+function! SpaceVim#logger#viewLog(...) abort
+ let l = a:0 > 0 ? a:1 : 1
+ let logs = readfile(s:logger_file, '')
+ echo logs[0]
+ return join(filter(logs, "v:val =~# '\[ SpaceVim \] \[\d\d\:\d\d\:\d\d\] \[" . s:levels[l] . "\]'"), "\n")
+endfunction
+
+""
+" @public
+" Set log output file of SpaceVim. by default it is
+" `~/.SpaceVim/.SpaceVim.log`
+function! SpaceVim#logger#setOutput(file) abort
+ let s:logger_file = a:file
+endfunction
+
+function! s:warpMsg(msg,l) abort
+ let time = strftime('%H:%M:%S')
+ let log = '[ SpaceVim ] [' . time . '] [' . s:levels[a:l - 1] . '] ' . a:msg
+ return log
+endfunction
+
+function! SpaceVim#logger#echoWarn(msg) abort
+ echohl WarningMsg
+ echom s:warpMsg(a:msg, 1)
+ echohl None
+endfunction
diff --git a/autoload/SpaceVim/plugins.vim b/autoload/SpaceVim/plugins.vim
index 90b85ba23..521dcb8bd 100644
--- a/autoload/SpaceVim/plugins.vim
+++ b/autoload/SpaceVim/plugins.vim
@@ -1,3 +1,4 @@
+scriptencoding utf-8
let s:plugins = {}
let s:plugins.core = [
diff --git a/doc/SpaceVim.txt b/doc/SpaceVim.txt
index c3b66cf64..97b9c5b5b 100644
--- a/doc/SpaceVim.txt
+++ b/doc/SpaceVim.txt
@@ -82,6 +82,17 @@ To disable it:
let g:spacevim_checkinstall = 0
<
+ *g:spacevim_enable_debug*
+Enable/Disable debug mode for SpaceVim, by default it is disabled.
+
+to enable it:
+>
+ let g:spacevim_enable_debug = 1
+<
+
+ *g:spacevim_debug_level*
+Set the debug level of SpaceVim, by default it is 1.
+
*g:spacevim_plugin_groups*
groups of plugins should be loaded.
@@ -119,5 +130,18 @@ SpaceVim#Layer({layer}) *SpaceVim#Layer()*
Load the {layer} you want : autocompletion : Make SpaceVim support
autocompletion. unite : Unite centric work-flow
+SpaceVim#logger#setLevel({level}) *SpaceVim#logger#setLevel()*
+ Set debug level of SpaceVim, by default it is 1. all message will be logged.
+
+ 1 : log all the message.
+
+ 2 : log warning and error message
+
+ 3 : log error message only
+
+SpaceVim#logger#setOutput({file}) *SpaceVim#logger#setOutput()*
+ Set log output file of SpaceVim. by default it is
+ `~/.SpaceVim/.SpaceVim.log`
+
vim:tw=78:ts=8:ft=help:norl:
diff --git a/sitemap.xml b/sitemap.xml
index f20f74309..5bdd1751d 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -16,4 +16,4 @@
2017-01-08T05:59:47+00:00
daily
-
\ No newline at end of file
+