if not modules then modules = { } end modules ['trac-log'] = { version = 1.001, comment = "companion to trac-log.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this is old code that needs an overhaul --~ io.stdout:setvbuf("no") --~ io.stderr:setvbuf("no") local write_nl, write = texio.write_nl or print, texio.write or io.write local format, gmatch = string.format, string.gmatch local texcount = tex and tex.count if texlua then write_nl = print write = io.write end --[[ldx--

This is a prelude to a more extensive logging module. For the sake of parsing log files, in addition to the standard logging we will provide an structured file. Actually, any logging that is hooked into callbacks will be \XML\ by default.

--ldx]]-- logs = logs or { } logs.xml = logs.xml or { } logs.tex = logs.tex or { } --[[ldx--

This looks pretty ugly but we need to speed things up a bit.

--ldx]]-- logs.moreinfo = [[ more information about ConTeXt and the tools that come with it can be found at: maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net wiki : http://contextgarden.net ]] logs.levels = { ['error'] = 1, ['warning'] = 2, ['info'] = 3, ['debug'] = 4, } logs.functions = { 'report', 'start', 'stop', 'push', 'pop', 'line', 'direct', 'start_run', 'stop_run', 'start_page_number', 'stop_page_number', 'report_output_pages', 'report_output_log', 'report_tex_stat', 'report_job_stat', 'show_open', 'show_close', 'show_load', } logs.tracers = { } logs.level = 0 logs.mode = string.lower((os.getenv("MTX.LOG.MODE") or os.getenv("MTX_LOG_MODE") or "tex")) function logs.set_level(level) logs.level = logs.levels[level] or level end function logs.set_method(method) for _, v in next, logs.functions do logs[v] = logs[method][v] or function() end end end -- tex logging function logs.tex.report(category,fmt,...) -- new if fmt then write_nl(category .. " | " .. format(fmt,...)) else write_nl(category .. " |") end end function logs.tex.line(fmt,...) -- new if fmt then write_nl(format(fmt,...)) else write_nl("") end end --~ function logs.tex.start_page_number() --~ local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno --~ if real > 0 then --~ if user > 0 then --~ if sub > 0 then --~ write(format("[%s.%s.%s",real,user,sub)) --~ else --~ write(format("[%s.%s",real,user)) --~ end --~ else --~ write(format("[%s",real)) --~ end --~ else --~ write("[-") --~ end --~ end --~ function logs.tex.stop_page_number() --~ write("]") --~ end local real, user, sub function logs.tex.start_page_number() real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno end function logs.tex.stop_page_number() if real > 0 then if user > 0 then if sub > 0 then logs.report("pages", "flushing realpage %s, userpage %s, subpage %s",real,user,sub) else logs.report("pages", "flushing realpage %s, userpage %s",real,user) end else logs.report("pages", "flushing realpage %s",real) end else logs.report("pages", "flushing page") end io.flush() end logs.tex.report_job_stat = statistics.show_job_stat -- xml logging function logs.xml.report(category,fmt,...) -- new if fmt then write_nl(format("%s",category,format(fmt,...))) else write_nl(format("",category)) end end function logs.xml.line(fmt,...) -- new if fmt then write_nl(format("%s",format(fmt,...))) else write_nl("") end end function logs.xml.start() if logs.level > 0 then tw("<%s>" ) end end function logs.xml.stop () if logs.level > 0 then tw("") end end function logs.xml.push () if logs.level > 0 then tw("" ) end end function logs.xml.start_run() write_nl("") write_nl("") -- xmlns='www.pragma-ade.com/luatex/schemas/context-job.rng' write_nl("") end function logs.xml.stop_run() write_nl("") end function logs.xml.start_page_number() write_nl(format("

") write_nl("") end function logs.xml.report_output_pages(p,b) write_nl(format("", p)) write_nl(format("", b)) write_nl("") end function logs.xml.report_output_log() end function logs.xml.report_tex_stat(k,v) texiowrite_nl("log",""..tostring(v).."") end local level = 0 function logs.xml.show_open(name) level = level + 1 texiowrite_nl(format("",level,name)) end function logs.xml.show_close(name) texiowrite(" ") level = level - 1 end function logs.xml.show_load(name) texiowrite_nl(format("",level+1,name)) end -- local name, banner = 'report', 'context' local function report(category,fmt,...) if fmt then write_nl(format("%s | %s: %s",name,category,format(fmt,...))) elseif category then write_nl(format("%s | %s",name,category)) else write_nl(format("%s |",name)) end end local function simple(fmt,...) if fmt then write_nl(format("%s | %s",name,format(fmt,...))) else write_nl(format("%s |",name)) end end function logs.setprogram(_name_,_banner_,_verbose_) name, banner = _name_, _banner_ if _verbose_ then trackers.enable("resolvers.locating") end logs.set_method("tex") logs.report = report -- also used in libraries logs.simple = simple -- only used in scripts ! if utils then utils.report = simple end logs.verbose = _verbose_ end function logs.setverbose(what) if what then trackers.enable("resolvers.locating") else trackers.disable("resolvers.locating") end logs.verbose = what or false end function logs.extendbanner(_banner_,_verbose_) banner = banner .. " | ".. _banner_ if _verbose_ ~= nil then logs.setverbose(what) end end logs.verbose = false logs.report = logs.tex.report logs.simple = logs.tex.report function logs.reportlines(str) -- todo: for line in gmatch(str,"(.-)[\n\r]") do logs.report(line) end end function logs.reportline() -- for scripts too logs.report() end logs.simpleline = logs.reportline function logs.reportbanner() -- for scripts too logs.report(banner) end function logs.help(message,option) logs.reportbanner() logs.reportline() logs.reportlines(message) local moreinfo = logs.moreinfo or "" if moreinfo ~= "" and option ~= "nomoreinfo" then logs.reportline() logs.reportlines(moreinfo) end end logs.set_level('error') logs.set_method('tex') function logs.system(whereto,process,jobname,category,...) for i=1,10 do local f = io.open(whereto,"a") if f then f:write(format("%s %s => %s => %s => %s\r",os.date("%d/%m/%y %H:%m:%S"),process,jobname,category,format(...))) f:close() break else sleep(0.1) end end end --~ local syslogname = "oeps.xxx" --~ --~ for i=1,10 do --~ logs.system(syslogname,"context","test","fonts","font %s recached due to newer version (%s)","blabla","123") --~ end function logs.fatal(where,...) logs.report(where,"fatal error: %s, aborting now",format(...)) os.exit() end