001 /* 002 * Copyright 2006 Stephen McConnell. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package net.dpml.http; 017 018 import net.dpml.logging.Logger; 019 020 import net.dpml.util.ExceptionHelper; 021 022 /** 023 * Wrapper to redirect Jetty logging to DPML logging. 024 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a> 025 * @version 0.0.4 026 */ 027 public class LoggerAdapter implements org.mortbay.log.Logger 028 { 029 private static Logger m_LOGGER; 030 031 static void setRootLogger( Logger logger ) 032 { 033 if( null == m_LOGGER ) 034 { 035 m_LOGGER = logger; 036 System.setProperty( "org.mortbay.log.class", LoggerAdapter.class.getName() ); 037 m_LOGGER.debug( "logging adapter established" ); 038 } 039 //else 040 //{ 041 // throw new IllegalStateException( "m_LOGGER already initialized." ); 042 //} 043 } 044 045 private final Logger m_logger; 046 047 /** 048 * Creation of a new logger adapter. 049 */ 050 public LoggerAdapter() 051 { 052 if( null == m_LOGGER ) 053 { 054 throw new IllegalStateException( "m_LOGGER not initialized." ); 055 } 056 else 057 { 058 m_logger = m_LOGGER; 059 } 060 } 061 062 /** 063 * Creation of a new logger adapter. 064 * @param logger the underlying log channel 065 */ 066 LoggerAdapter( Logger logger ) 067 { 068 m_logger = logger; 069 } 070 071 /** 072 * Get the debug enabled status. 073 * @return true if debug is enabled 074 */ 075 public boolean isDebugEnabled() 076 { 077 return m_logger.isDebugEnabled(); 078 } 079 080 /** 081 * Set the debug enabled status. 082 * @param flag true if debug is enabled 083 */ 084 public void setDebugEnabled( boolean flag ) 085 { 086 // ummmm 087 } 088 089 /** 090 * Publish an info level log message. 091 * @param msg the message 092 * @param arg0 an intial argument 093 * @param arg1 a subsequent argument 094 */ 095 public void info( String msg, Object arg0, Object arg1 ) 096 { 097 if( m_logger.isInfoEnabled() ) 098 { 099 String message = format( msg, arg0, arg1 ); 100 m_logger.info( message ); 101 } 102 } 103 104 /** 105 * Publish an debug level log message. 106 * @param message the message 107 * @param cause an exception 108 */ 109 public void debug( String message, Throwable cause ) 110 { 111 if( isDebugEnabled() ) 112 { 113 if( null == cause ) 114 { 115 m_logger.debug( message ); 116 } 117 else 118 { 119 String error = ExceptionHelper.packException( message, cause, false ); 120 m_logger.debug( error ); 121 } 122 } 123 } 124 125 /** 126 * Publish an debug level log message. 127 * @param msg the message 128 * @param arg0 an intial argument 129 * @param arg1 a subsequent argument 130 */ 131 public void debug( String msg, Object arg0, Object arg1 ) 132 { 133 if( isDebugEnabled() ) 134 { 135 String message = format( msg, arg0, arg1 ); 136 m_logger.debug( message ); 137 } 138 } 139 140 /** 141 * Publish an warning level log message. 142 * @param msg the message 143 * @param arg0 an intial argument 144 * @param arg1 a subsequent argument 145 */ 146 public void warn( String msg, Object arg0, Object arg1 ) 147 { 148 if( m_logger.isWarnEnabled() ) 149 { 150 String message = format( msg, arg0, arg1 ); 151 m_logger.warn( message ); 152 } 153 } 154 155 /** 156 * Publish an warning level log message. 157 * @param message the message 158 * @param error an exception 159 */ 160 public void warn( String message, Throwable error ) 161 { 162 if( m_logger.isWarnEnabled() ) 163 { 164 m_logger.warn( message, error ); 165 } 166 } 167 168 private String format( String msg, Object arg0, Object arg1 ) 169 { 170 int i0 = msg.indexOf( "{}" ); 171 172 int i1 = 0; 173 if( i0 < 0 ) 174 { 175 i1 = -1; 176 } 177 else 178 { 179 i1 = msg.indexOf( "{}" , i0 + 2 ); 180 } 181 182 if( ( arg1 != null ) && ( i1 >= 0 ) ) 183 { 184 msg = 185 msg.substring( 0, i1 ) 186 + arg1 187 + msg.substring( i1 + 2 ); 188 } 189 if( ( arg0 != null ) && ( i0 >= 0 ) ) 190 { 191 msg = 192 msg.substring( 0, i0 ) 193 + arg0 194 + msg.substring( i0 + 2 ); 195 } 196 return msg; 197 } 198 199 /** 200 * Create a logger matching the supplied category. 201 * @param category the category name 202 * @return the logging channel 203 */ 204 public org.mortbay.log.Logger getLogger( String category ) 205 { 206 Logger logger = m_LOGGER.getChildLogger( category ); 207 return new LoggerAdapter( logger ); 208 } 209 210 private String trim( String path ) 211 { 212 if( path.startsWith( "." ) ) 213 { 214 return trim( path.substring( 1 ) ); 215 } 216 else if( ".".equals( path ) ) 217 { 218 return ""; 219 } 220 else 221 { 222 return path; 223 } 224 } 225 226 /** 227 * Return a string representation of this logger. 228 * @return the string value 229 */ 230 public String toString() 231 { 232 return "net.dpml.logging.Logger"; 233 } 234 235 } 236