Модуль логирования

Опубликовано в QLua

Модуль логирования. Используются функции иных модулей. Часть из них есть на этом сайте, остальные придётся написать, они несложные.

module("logfile",package.seeall)

local os = require "os"
local io = require "io"
local ioex = require "ioex"
local msg = require "msg"
local timedate = require "timedate"
local tableex = require "tableex"
local mathex = require "mathex"

-----------------------------------------------------------------------------
-- Настройка лог-файла
local name = getScriptPath() .. "\\qlua.log"-- Имя лог-файла. Если пустая строка, то вывод в лог не производится
local logstart = 0 -- Время начала вывода в логфайл (00:00:00)
local logend = 86400 -- Время окончания вывода в логфайл (24:00:00)
local trace_flag = false -- Флаг разрешения диагностики

-----------------------------------------------------------------------------
-- Запись строки в файл лога
-- Возвращает:
-- Первое значение: true при успехе, false если вывод в файл в текущее время запрещен и nil при ошибке.
-- (при nil создается сообщение в терминале).
-- Второе значение - строка диагностики
local function _write_log(...)
if name == nil then
return false,"Не задано имя файла"
end

local file,err = io.open(name,"a")
if not file then
msg.print(err)   // вызов функции message()
return nil,err
end

local str = os.date("%X",os.time()) .. " "
for i = 1, arg.n do
if type(arg[ i ]) == "table" then
arg[ i ] = tableex.tostr(arg[ i ])
else
arg[ i ] = tostring(arg[ i ])
end
str = str .. arg[ i ]
end
file:write(str .. "\n")
file:close()

return true
end

-----------------------------------------------------------------------------
-- Запись информации в лог-файл
-- Параметр: значение любого типа
-- Возвращает:
-- Первое значение: true при успехе, false если вывод в файл в текущее время запрещен и nil при ошибке.
-- Второе значение - строка диагностики
function print(...)
if not mathex.between_equal(timedate.toseconds(os.date("%X",os.time())),logstart,logend) then
return false,"Ограничение вывода в лог-файл по времени"
end
return _write_log(...)
end

-----------------------------------------------------------------------------
-- Шапка лога для каждого нового запуска
-- Возвращает:
-- Первое значение: true при успехе и nil при ошибке.
-- Второе значение - строка диагностики
function signature()
local systemtime = os.time()
return(_write_log("------------------------------------------------------------------\n" .. os.date("%x",systemtime) .. "\t" .. os.date("%A",systemtime) .. "\t" .. os.date("%z",systemtime) .. '\n\t\Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.\twww.bot4sale.ru\n'))
end

-----------------------------------------------------------------------------
-- Вывод диагностики
-- Выводится всегда, невзирая на установленный временной диапазон
-- Возвращает:
-- Первое значение: true при успехе false при запрете и nil при ошибке.
-- Второе значение - строка диагностики
function trace(...)
if trace_flag then
return(_write_log(...))
end
return false,"Расширенная диагностика запрещена"
end

------------------------------------------------------
-- Задаёт имя лог-файла
function setfile(path)
if path and ioex.split(path) == "" then -- нет пути к лог-файлу
path = getScriptPath() .. "\\" .. path
end
name = path
end

--------------------------------------------------------
-- Задаёт время вывода в логфайл
-- Example logfile.settime("10:15:00-23:40:00")
function settime(period)
local periods = stringex.split(period,"%-")
if periods ~= nil then
logstart = timedate.toseconds(periods[1])
logend = timedate.toseconds(periods[2])
end
end

-----------------------------------------------------------
-- Включение / выключение трассировки
function settrace(flag)
      trace_flag = flag
end

 

 

Недостаточно прав для комментирования

Архив QLua