diff options
author | chai <chaifix@163.com> | 2018-12-23 14:24:49 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-12-23 14:24:49 +0800 |
commit | d5bd4d53dfcda03558be24e8c353fc042802c085 (patch) | |
tree | a9109b68e529a49314154f5511fe53bb0e74fc0f /src/libjin-lua/scripts/log.lua | |
parent | 5b8b5c95589e615afda3f0d67db612b64297c2a0 (diff) |
* json\xml扩展
Diffstat (limited to 'src/libjin-lua/scripts/log.lua')
-rw-r--r-- | src/libjin-lua/scripts/log.lua | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/libjin-lua/scripts/log.lua b/src/libjin-lua/scripts/log.lua new file mode 100644 index 0000000..bf88399 --- /dev/null +++ b/src/libjin-lua/scripts/log.lua @@ -0,0 +1,93 @@ +-- +-- https://github.com/rxi/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 = nil +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 + + +local _tostring = tostring + +local tostring = function(...) + local t = {} + for i = 1, select('#', ...) do + local x = select(i, ...) + if type(x) == "number" then + x = round(x, .01) + end + t[#t + 1] = _tostring(x) + end + return table.concat(t, " ") +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 msg = tostring(...) + local info = debug.getinfo(2, "Sl") + local lineinfo = info.short_src .. ":" .. info.currentline + + -- Output to console + 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)) + + -- 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 + +-- Export to Jin. + +jin.log = log |