From 52b74557415eb757ad4b7481b0aec8a3f98dd58d Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Sun, 10 Oct 2021 21:07:41 +0200 Subject: feat: add an independent lvim namespace (#1699) --- lua/lvim/core/log.lua | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 lua/lvim/core/log.lua (limited to 'lua/lvim/core/log.lua') diff --git a/lua/lvim/core/log.lua b/lua/lvim/core/log.lua new file mode 100644 index 00000000..fca1fcb4 --- /dev/null +++ b/lua/lvim/core/log.lua @@ -0,0 +1,60 @@ +local Log = {} + +--- Adds a log entry using Plenary.log +---@param msg any +---@param level string [same as vim.log.log_levels] +function Log:add_entry(msg, level) + assert(type(level) == "string") + if self.__handle then + -- plenary uses lower-case log levels + self.__handle[level:lower()](msg) + return + end + local status_ok, plenary = pcall(require, "plenary") + if status_ok then + local default_opts = { plugin = "lunarvim", level = lvim.log.level } + local handle = plenary.log.new(default_opts) + handle[level:lower()](msg) + self.__handle = handle + end + -- don't do anything if plenary is not available +end + +---Retrieves the path of the logfile +---@return string path of the logfile +function Log:get_path() + return string.format("%s/%s.log", vim.fn.stdpath "cache", "lunarvim") +end + +---Add a log entry at TRACE level +---@param msg any +function Log:trace(msg) + self:add_entry(msg, "TRACE") +end + +---Add a log entry at DEBUG level +---@param msg any +function Log:debug(msg) + self:add_entry(msg, "DEBUG") +end + +---Add a log entry at INFO level +---@param msg any +function Log:info(msg) + self:add_entry(msg, "INFO") +end + +---Add a log entry at WARN level +---@param msg any +function Log:warn(msg) + self:add_entry(msg, "WARN") +end + +---Add a log entry at ERROR level +---@param msg any +function Log:error(msg) + self:add_entry(msg, "ERROR") +end + +setmetatable({}, Log) +return Log -- cgit v1.2.3 From 9e18c16b2b378792c689591190774786fd5da04c Mon Sep 17 00:00:00 2001 From: Chase Colman <5411+chase@users.noreply.github.com> Date: Tue, 12 Oct 2021 23:33:41 +0800 Subject: fix(config/log): show error in config instead of hiding (#1751) --- lua/lvim/core/log.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lua/lvim/core/log.lua') diff --git a/lua/lvim/core/log.lua b/lua/lvim/core/log.lua index fca1fcb4..3d8c0dc8 100644 --- a/lua/lvim/core/log.lua +++ b/lua/lvim/core/log.lua @@ -12,7 +12,7 @@ function Log:add_entry(msg, level) end local status_ok, plenary = pcall(require, "plenary") if status_ok then - local default_opts = { plugin = "lunarvim", level = lvim.log.level } + local default_opts = { plugin = "lunarvim", level = lvim.log.level, info_level = 4 } local handle = plenary.log.new(default_opts) handle[level:lower()](msg) self.__handle = handle -- cgit v1.2.3 From 25747cfff457d5375b6141588d81017ca515ffcb Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Thu, 21 Oct 2021 07:42:28 +0200 Subject: [Feature] use structlog and notify.nvim (#1737) Co-authored-by: Luc Sinet --- lua/lvim/core/log.lua | 147 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 124 insertions(+), 23 deletions(-) (limited to 'lua/lvim/core/log.lua') diff --git a/lua/lvim/core/log.lua b/lua/lvim/core/log.lua index 3d8c0dc8..9ddc641f 100644 --- a/lua/lvim/core/log.lua +++ b/lua/lvim/core/log.lua @@ -1,60 +1,161 @@ local Log = {} +local logfile = string.format("%s/%s.log", vim.fn.stdpath "cache", "lvim") + +Log.levels = { + TRACE = 1, + DEBUG = 2, + INFO = 3, + WARN = 4, + ERROR = 5, +} + +vim.tbl_add_reverse_lookup(Log.levels) + +function Log:init() + local status_ok, structlog = pcall(require, "structlog") + if not status_ok then + return nil + end + + local nvim_notify_params = {} + local nvim_notify_params_injecter = function(_, entry) + for key, value in pairs(nvim_notify_params) do + entry[key] = value + end + return entry + end + + local nvim_notify_default_namer = function(logger, entry) + entry["title"] = logger.name + return entry + end + + nvim_notify_params_injecter(nil, {}) + local log_level = Log.levels[(lvim.log.level):upper() or "WARN"] + structlog.configure { + lvim = { + sinks = { + structlog.sinks.Console(log_level, { + async = false, + processors = { + structlog.processors.Namer(), + structlog.processors.StackWriter({ "line", "file" }, { max_parents = 0, stack_level = 2 }), + structlog.processors.Timestamper "%H:%M:%S", + }, + formatter = structlog.formatters.FormatColorizer( -- + "%s [%-5s] %s: %-30s", + { "timestamp", "level", "logger_name", "msg" }, + { level = structlog.formatters.FormatColorizer.color_level() } + ), + }), + structlog.sinks.NvimNotify(Log.levels.INFO, { + processors = { + nvim_notify_default_namer, + nvim_notify_params_injecter, + }, + formatter = structlog.formatters.Format( -- + "%s", + { "msg" }, + { blacklist_all = true } + ), + params_map = { + icon = "icon", + keep = "keep", + on_open = "on_open", + on_close = "on_close", + timeout = "timeout", + title = "title", + }, + }), + structlog.sinks.File(Log.levels.TRACE, logfile, { + processors = { + structlog.processors.Namer(), + structlog.processors.StackWriter({ "line", "file" }, { max_parents = 3, stack_level = 2 }), + structlog.processors.Timestamper "%H:%M:%S", + }, + formatter = structlog.formatters.Format( -- + "%s [%-5s] %s: %-30s", + { "timestamp", "level", "logger_name", "msg" } + ), + }), + }, + }, + } + + local logger = structlog.get_logger "lvim" + + if lvim.log.override_notify then + -- Overwrite vim.notify to use the logger + vim.notify = function(msg, vim_log_level, opts) + nvim_notify_params = opts or {} + -- https://github.com/neovim/neovim/blob/685cf398130c61c158401b992a1893c2405cd7d2/runtime/lua/vim/lsp/log.lua#L5 + logger:log(vim_log_level + 1, msg) + end + end + + return logger +end + --- Adds a log entry using Plenary.log ----@param msg any +---@fparam msg any ---@param level string [same as vim.log.log_levels] -function Log:add_entry(msg, level) - assert(type(level) == "string") +function Log:add_entry(level, msg, event) if self.__handle then - -- plenary uses lower-case log levels - self.__handle[level:lower()](msg) + self.__handle:log(level, msg, event) return end - local status_ok, plenary = pcall(require, "plenary") - if status_ok then - local default_opts = { plugin = "lunarvim", level = lvim.log.level, info_level = 4 } - local handle = plenary.log.new(default_opts) - handle[level:lower()](msg) - self.__handle = handle + + local logger = self:init() + if not logger then + return end - -- don't do anything if plenary is not available + + self.__handle = logger + self.__handle:log(level, msg, event) end ---Retrieves the path of the logfile ---@return string path of the logfile function Log:get_path() - return string.format("%s/%s.log", vim.fn.stdpath "cache", "lunarvim") + return logfile end ---Add a log entry at TRACE level ---@param msg any -function Log:trace(msg) - self:add_entry(msg, "TRACE") +---@param event any +function Log:trace(msg, event) + self:add_entry(self.levels.TRACE, msg, event) end ---Add a log entry at DEBUG level ---@param msg any -function Log:debug(msg) - self:add_entry(msg, "DEBUG") +---@param event any +function Log:debug(msg, event) + self:add_entry(self.levels.DEBUG, msg, event) end ---Add a log entry at INFO level ---@param msg any -function Log:info(msg) - self:add_entry(msg, "INFO") +---@param event any +function Log:info(msg, event) + self:add_entry(self.levels.INFO, msg, event) end ---Add a log entry at WARN level ---@param msg any -function Log:warn(msg) - self:add_entry(msg, "WARN") +---@param event any +function Log:warn(msg, event) + self:add_entry(self.levels.WARN, msg, event) end ---Add a log entry at ERROR level ---@param msg any -function Log:error(msg) - self:add_entry(msg, "ERROR") +---@param event any +function Log:error(msg, event) + self:add_entry(self.levels.ERROR, msg, event) end setmetatable({}, Log) + return Log -- cgit v1.2.3