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(dc,SELECT,-1,-1,-1,"query"); 059 } 060 catch (PageException e) { 061 new QueryImpl(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 /** 076 * @see railo.commons.io.log.Log#log(int, java.lang.String, java.lang.String) 077 */ 078 public void log(int level, String application, String message) { 079 DatasourceConnection dc=null; 080 try { 081 dc = pool.getDatasourceConnection(ThreadLocalPageContext.get(),datasource, username, password); 082 SQLImpl sql = new SQLImpl(INSERT); 083 sql.addItems(new SQLItemImpl(application,CFTypes.VARCHAR)); 084 sql.addItems(new SQLItemImpl(message,CFTypes.VARCHAR)); 085 sql.addItems(new SQLItemImpl(new DateTimeImpl(),CFTypes.DATE)); 086 new QueryImpl(dc,sql,-1,-1,-1,"query"); 087 } 088 catch (PageException e) { 089 console.log(level, application, message); 090 } 091 finally{ 092 if(pool!=null)pool.releaseDatasourceConnection(dc); 093 } 094 } 095 096 /** 097 * @see railo.commons.io.log.LogWithLevel#getLogLevel() 098 */ 099 public int getLogLevel() { 100 return logLevel; 101 } 102 103 /** 104 * @see railo.commons.io.log.LogWithLevel#setLogLevel(int) 105 */ 106 public void setLogLevel(int level) { 107 this.logLevel=level; 108 } 109 110 111 /** 112 * @see railo.commons.io.log.Log#debug(java.lang.String, java.lang.String) 113 */ 114 public void debug(String application, String message) { 115 log(LEVEL_DEBUG, application, message); 116 } 117 118 /** 119 * @see railo.commons.io.log.Log#error(java.lang.String, java.lang.String) 120 */ 121 public void error(String application, String message) { 122 log(LEVEL_ERROR, application, message); 123 } 124 125 /** 126 * @see railo.commons.io.log.Log#fatal(java.lang.String, java.lang.String) 127 */ 128 public void fatal(String application, String message) { 129 log(LEVEL_FATAL, application, message); 130 } 131 132 /** 133 * @see railo.commons.io.log.Log#info(java.lang.String, java.lang.String) 134 */ 135 public void info(String application, String message) { 136 log(LEVEL_INFO, application, message); 137 } 138 139 /** 140 * @see railo.commons.io.log.Log#warn(java.lang.String, java.lang.String) 141 */ 142 public void warn(String application, String message) { 143 log(LEVEL_WARN, application, message); 144 } 145 }