summaryrefslogtreecommitdiff
path: root/lua/telescope/log.lua
blob: fb3d712ad4b493539202218609fec2f564e54dc7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
-- https://raw.githubusercontent.com/rxi/log.lua/master/log.lua
-- log.lua
--
-- Copyright (c) 2016 rxi
--
-- This library is free software; you can redistribute it and/or modify it
-- under the terms of the MIT license. See LICENSE for details.
--

local log = { _version = "0.1.0" }

log.usecolor = true
log.outfile = vim.fn.stdpath('data') .. '/telescope.log'
log.console = false
log.level = "trace"


local modes = {
  { name = "trace", color = "\27[34m", },
  { name = "debug", color = "\27[36m", },
  { name = "info",  color = "\27[32m", },
  { name = "warn",  color = "\27[33m", },
  { name = "error", color = "\27[31m", },
  { name = "fatal", color = "\27[35m", },
}


local levels = {}
for i, v in ipairs(modes) do
  levels[v.name] = i
end


local round = function(x, increment)
  increment = increment or 1
  x = x / increment
  return (x > 0 and math.floor(x + .5) or math.ceil(x - .5)) * increment
end

for i, x in ipairs(modes) do
  local nameupper = x.name:upper()
  log[x.name] = function(...)
    -- Return early if we're below the log level
    if i < levels[log.level] then
      return
    end

    local passed = {...}
    local fmt = table.remove(passed, 1)
    local inspected = {}
    for _, v in ipairs(passed) do
      table.insert(inspected, vim.inspect(v))
    end
    local msg = string.format(fmt, unpack(inspected))
    local info = debug.getinfo(2, "Sl")
    local lineinfo = info.short_src .. ":" .. info.currentline

    -- Output to console
    if log.console then
      print(string.format("%s[%-6s%s]%s %s: %s",
                          log.usecolor and x.color or "",
                          nameupper,
                          os.date("%H:%M:%S"),
                          log.usecolor and "\27[0m" or "",
                          lineinfo,
                          msg))
    end

    -- Output to log file
    if log.outfile then
      local fp = io.open(log.outfile, "a")
      local str = string.format("[%-6s%s] %s: %s\n",
                                nameupper, os.date(), lineinfo, msg)
      fp:write(str)
      fp:close()
    end

  end
end

log.info("Logger Succesfully Loaded")

return log