Skip to content

Commit

Permalink
feat(#14): added lsp factory
Browse files Browse the repository at this point in the history
  • Loading branch information
quantumfate committed Aug 22, 2023
1 parent abd8a1c commit 878f57f
Showing 1 changed file with 105 additions and 20 deletions.
125 changes: 105 additions & 20 deletions lua/qvim/log.lua
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,73 @@ function Log:setup()
return nil
end
structlog.configure({
lsp = {
pipelines = {
{
level = structlog.level.INFO,
processors = {
structlog.processors.StackWriter(
{ "line", "file" },
{ max_parents = 0, stack_level = 0 }
),
structlog.processors.Timestamper("%H:%M:%S"),
},
formatter = structlog.formatters.FormatColorizer( --
"%s [%s] %s: %-30s",
{ "timestamp", "level", "logger_name", "msg" },
{
level = structlog.formatters.FormatColorizer.color_level(),
}
),
sink = structlog.sinks.Console(),
},
{
level = structlog.level.ERROR,
processors = {
structlog.processors.StackWriter(
{ "line", "file" },
{ max_parents = 3 }
),
structlog.processors.Timestamper("%H:%M:%S"),
},
formatter = structlog.formatters.Format( --
"%s [%s] %s: %-30s",
{ "timestamp", "level", "logger_name", "msg" }
),
sink = structlog.sinks.File(self:get_path("error", "lsp")),
},
{
level = structlog.level.DEBUG,
processors = {
structlog.processors.StackWriter(
{ "line", "file" },
{ max_parents = 3 }
),
structlog.processors.Timestamper("%H:%M:%S"),
},
formatter = structlog.formatters.Format( --
"%s [%s] %s: %-30s",
{ "timestamp", "level", "logger_name", "msg" }
),
sink = structlog.sinks.File(self:get_path("debug", "lsp")),
},
{
level = structlog.level.TRACE,
processors = {
structlog.processors.StackWriter(
{ "line", "file" },
{ max_parents = 3 }
),
structlog.processors.Timestamper("%H:%M:%S"),
},
formatter = structlog.formatters.Format( --
"%s [%s] %s: %-30s",
{ "timestamp", "level", "logger_name", "msg" }
),
sink = structlog.sinks.File(self:get_path("trace", "lsp")),
},
},
},
qvim = {
pipelines = {
{
Expand Down Expand Up @@ -122,17 +189,18 @@ end
---@param level integer [same as vim.log.levels]
---@param msg any
---@param event any
function Log:add_entry(level, msg, event)
function Log:add_entry(level, msg, event, pipeline)
pipeline = pipeline or "qvim"
if
not pcall(function()
local logger = self:get_logger()
local logger = self:get_logger(pipeline)
if not logger then
return
end
logger:log(level, vim.inspect(msg), event)
end)
then
vim.notify(msg, level, { title = "qvim" })
vim.notify(msg, level, { title = pipeline })
end
end

Expand All @@ -151,50 +219,67 @@ end

---Retrieves the path of the logfile
---@param variant string|nil
---@param pipeline string|nil
---@return string path of the logfile
function Log:get_path(variant)
function Log:get_path(variant, pipeline)
variant = variant or ""
return string.format(
"%s/%s-%s.log",
get_qvim_log_dir(),
variant:lower(),
"qvim"
)
pipeline = pipeline or "qvim"

if pipeline == "qvim" then
return string.format(
"%s/%s-%s.log",
get_qvim_log_dir(),
"qvim",
variant:lower()
)
else
return string.format(
"%s/%s/%s.log",
get_qvim_log_dir(),
pipeline,
variant:lower()
)
end
end

---Add a log entry at TRACE level
---@param msg any
---@param event any
function Log:trace(msg, event)
Log:add_entry(self.levels.TRACE, msg, event)
---@param pipeline string|nil
function Log:trace(msg, event, pipeline)
Log:add_entry(self.levels.TRACE, msg, event, pipeline)
end

---Add a log entry at DEBUG level
---@param msg any
---@param event any
function Log:debug(msg, event)
Log:add_entry(self.levels.DEBUG, msg, event)
---@param pipeline string|nil
function Log:debug(msg, event, pipeline)
Log:add_entry(self.levels.DEBUG, msg, event, pipeline)
end

---Add a log entry at INFO level
---@param msg any
---@param event any
function Log:info(msg, event)
Log:add_entry(self.levels.INFO, msg, event)
---@param pipeline string|nil
function Log:info(msg, event, pipeline)
Log:add_entry(self.levels.INFO, msg, event, pipeline)
end

---Add a log entry at WARN level
---@param msg any
---@param event any
function Log:warn(msg, event)
Log:add_entry(self.levels.WARN, msg, event)
---@param pipeline string|nil
function Log:warn(msg, event, pipeline)
Log:add_entry(self.levels.WARN, msg, event, pipeline)
end

---Add a log entry at ERROR level
---@param msg any
---@param event any
function Log:error(msg, event)
Log:add_entry(self.levels.ERROR, msg, event)
---@param pipeline string|nil
function Log:error(msg, event, pipeline)
Log:add_entry(self.levels.ERROR, msg, event, pipeline)
end

return setmetatable(Log, Log_mt)

0 comments on commit 878f57f

Please sign in to comment.