view src/luan/host/run.luan @ 1801:32e77b071e09 default tip

webserver logging
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 12 Mar 2024 09:28:39 -0600
parents 97cc73664ca8
children
line wrap: on
line source

require "java"
local Luan = require "luan:Luan.luan"
local error = Luan.error
local ipairs = Luan.ipairs or error()
local do_file = Luan.do_file or error()
local Number = require "luan:Number.luan"
local long = Number.long or error()
local Io = require "luan:Io.luan"
local Hosted = require "luan:host/Hosted.luan"
local WebHandler = require "java:luan.host.WebHandler"
local Logging = require "luan:logging/Logging.luan"

local log_to_console = false
for _, arg in ipairs{...} do
	if arg == "console" then
		log_to_console = true
	end
end
if not log_to_console then
	local LuanLogger = require "java:luan.modules.logging.LuanLogger"
	local Layouts = require "java:goodjava.logger.Layouts"
	local DateLayout = require "java:goodjava.logger.DateLayout"
	local ListLayout = require "java:goodjava.logger.ListLayout"
	local Level = require "java:goodjava.logger.Level"
	local RollingFileAppender = require "java:goodjava.logger.RollingFileAppender"
	local LevelAppender = require "java:goodjava.logger.LevelAppender"
	local ListAppender = require "java:goodjava.logger.ListAppender"

	local one_mb = long(1024*1024)
	local layout = ListLayout.new(DateLayout.new("yyyy-MM-dd HH:mm:ss,SSS")," ",Layouts.LEVEL_PADDED," ",Layouts.LOGGER," - ",Layouts.MESSAGE,"\n",Layouts.THROWABLE)

	local function new_appender(file,level)
		local files = { file..".log", file.."_1.log" }
		local appender = RollingFileAppender.new(layout, files)
		appender.maxFileSize = one_mb
		appender = LevelAppender.new(appender,level)
		return appender
	end

	local err = new_appender("logs/luan_error",Level.ERROR)
	local warn = new_appender("logs/luan_warn",Level.WARN)
	local info = new_appender("logs/luan_info",Level.INFO)
	local appender = ListAppender.new(err,warn,info)
	LuanLogger.configure(appender)
end

local logger = Logging.logger "run"


WebHandler.config = require "classpath:luan/host/Config.luan"
Hosted.WebHandler = WebHandler


local here = Io.schemes.file(".").canonical().to_string()
Hosted.sites_dir = here.."/sites/"

do_file "classpath:luan/host/main.luan"


-- web server

local Server = require "java:goodjava.webserver.Server"
local SafeHandler = require "java:goodjava.webserver.handlers.SafeHandler"

local handler = WebHandler.new(Hosted.sites_dir)
handler = SafeHandler.new(handler)
local server = Server.ForAddress.new("127.0.0.1",8080,handler)
server.start()


local sites_dir = Io.schemes.file(Hosted.sites_dir)
for _, site_dir in ipairs(sites_dir.children()) do
	local name = site_dir.name()
	WebHandler.loadHandler(name)
end