------------------------------------------------------------------------------- -- Saves the logging information in a table using luasql -- -- @author Thiago Costa Ponte (thiago@ideais.com.br) -- -- @copyright 2004-2011 Kepler Project -- ------------------------------------------------------------------------------- require"logging" function logging.sql(params) params = params or {} params.tablename = params.tablename or "LogTable" params.logdatefield = params.logdatefield or "LogDate" params.loglevelfield = params.loglevelfield or "LogLevel" params.logmessagefield = params.logmessagefield or "LogMessage" if params.connectionfactory == nil or type(params.connectionfactory) ~= "function" then return nil, "No specified connection factory function" end local con, err if params.keepalive then con, err = params.connectionfactory() end return logging.new( function(self, level, message) if (not params.keepalive) or (con == nil) then con, err = params.connectionfactory() if not con then return nil, err end end local logDate = os.date("%Y-%m-%d %H:%M:%S") local insert = string.format("INSERT INTO %s (%s, %s, %s) VALUES ('%s', '%s', '%s')", params.tablename, params.logdatefield, params.loglevelfield, params.logmessagefield, logDate, level, string.gsub(message, "'", "''")) local ret, err = pcall(con.execute, con, insert) if not ret then con, err = params.connectionfactory() if not con then return nil, err end ret, err = con:execute(insert) if not ret then return nil, err end end if not params.keepalive then con:close() end return true end ) end return logging.sql