001 package railo.commons.io.log; 002 003 import railo.runtime.PageContext; 004 import railo.runtime.config.ConfigImpl; 005 import railo.runtime.db.CFTypes; 006 import railo.runtime.db.DataSource; 007 import railo.runtime.db.DatasourceConnection; 008 import railo.runtime.db.DatasourceConnectionPool; 009 import railo.runtime.db.SQL; 010 import railo.runtime.db.SQLImpl; 011 import railo.runtime.db.SQLItemImpl; 012 import railo.runtime.engine.ThreadLocalPageContext; 013 import railo.runtime.exp.PageException; 014 import railo.runtime.type.QueryImpl; 015 import railo.runtime.type.dt.DateTimeImpl; 016 017 /** 018 * Datasource output logger 019 * TODO impl 020 */ 021 public final class LogDataSource implements Log { 022 023 private static final SQL SELECT = new SQLImpl("select for checking if table exists");//TODO 024 private static final String INSERT = "insert into cflog(application,message,created) values(?,?,?)";//TODO 025 private static final SQL CREATE = new SQLImpl("create table");//TODO 026 //private ConfigImpl config; 027 private DataSource datasource; 028 private String username; 029 private String password; 030 //private String table; 031 private int logLevel; 032 private DatasourceConnectionPool pool; 033 private LogConsole console; 034 035 /** 036 * Constructor of the class 037 * @param config 038 * @param datasource 039 * @param username 040 * @param password 041 * @param table 042 * @throws PageException 043 */ 044 public LogDataSource(PageContext pc,int logLevel,ConfigImpl config, DataSource datasource, String username, String password, String table) { 045 this.logLevel=logLevel; 046 //this.config=config; 047 this.datasource=datasource; 048 this.username=username; 049 this.password=password; 050 //this.table=table; 051 pool = config.getDatasourceConnectionPool(); 052 console=LogConsole.getInstance(config,logLevel); 053 054 DatasourceConnection dc=null; 055 try { 056 dc = pool.getDatasourceConnection(pc,datasource, username, password); 057 try { 058 new QueryImpl(pc,dc,SELECT,-1,-1,-1,"query"); 059 } 060 catch (PageException e) { 061 new QueryImpl(pc,dc,CREATE,-1,-1,-1,"query"); 062 } 063 } 064 catch (PageException e) { 065 config.getErrWriter(); 066 } 067 finally{ 068 if(pool!=null)pool.releaseDatasourceConnection(dc); 069 } 070 071 072 } 073 074 075 @Override 076 public void log(int level, String application, String message) { 077 DatasourceConnection dc=null; 078 try { 079 dc = pool.getDatasourceConnection(ThreadLocalPageContext.get(),datasource, username, password); 080 SQLImpl sql = new SQLImpl(INSERT); 081 sql.addItems(new SQLItemImpl(application,CFTypes.VARCHAR)); 082 sql.addItems(new SQLItemImpl(message,CFTypes.VARCHAR)); 083 sql.addItems(new SQLItemImpl(new DateTimeImpl(),CFTypes.DATE)); 084 new QueryImpl(ThreadLocalPageContext.get(),dc,sql,-1,-1,-1,"query"); 085 } 086 catch (PageException e) { 087 console.log(level, application, message); 088 } 089 finally{ 090 if(pool!=null)pool.releaseDatasourceConnection(dc); 091 } 092 } 093 094 @Override 095 public int getLogLevel() { 096 return logLevel; 097 } 098 099 @Override 100 public void setLogLevel(int level) { 101 this.logLevel=level; 102 } 103 104 105 @Override 106 public void debug(String application, String message) { 107 log(LEVEL_DEBUG, application, message); 108 } 109 110 @Override 111 public void error(String application, String message) { 112 log(LEVEL_ERROR, application, message); 113 } 114 115 @Override 116 public void fatal(String application, String message) { 117 log(LEVEL_FATAL, application, message); 118 } 119 120 @Override 121 public void info(String application, String message) { 122 log(LEVEL_INFO, application, message); 123 } 124 125 @Override 126 public void warn(String application, String message) { 127 log(LEVEL_WARN, application, message); 128 } 129 }