summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/core/log.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/core/log.lua')
-rw-r--r--.config/nvim/lua/core/log.lua113
1 files changed, 90 insertions, 23 deletions
diff --git a/.config/nvim/lua/core/log.lua b/.config/nvim/lua/core/log.lua
index de03521..c44808f 100644
--- a/.config/nvim/lua/core/log.lua
+++ b/.config/nvim/lua/core/log.lua
@@ -1,60 +1,127 @@
local Log = {}
+local logfile = string.format("%s/%s.log", vim.fn.stdpath "cache", "nvim")
+
+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 log_level = Log.levels[(options.log.level):upper() or "WARN"]
+ local nvim_log = {
+ nvim = {
+ 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.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" }
+ ),
+ }),
+ },
+ },
+ }
+
+ structlog.configure(nvim_log)
+
+ local logger = structlog.get_logger "nvim"
+
+ 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, vim.inspect(msg), event)
return
end
- local status_ok, plenary = pcall(require, "plenary")
- if status_ok then
- local default_opts = { plugin = "nvim", level = options.log.level }
- 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, vim.inspect(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", "nvim")
+ 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