001// SECTION-START[License Header] 002// <editor-fold defaultstate="collapsed" desc=" Generated License "> 003/* 004 * Java Object Management and Configuration 005 * Copyright (C) Christian Schulte, 2005-206 006 * All rights reserved. 007 * 008 * Redistribution and use in source and binary forms, with or without 009 * modification, are permitted provided that the following conditions 010 * are met: 011 * 012 * o Redistributions of source code must retain the above copyright 013 * notice, this list of conditions and the following disclaimer. 014 * 015 * o Redistributions in binary form must reproduce the above copyright 016 * notice, this list of conditions and the following disclaimer in 017 * the documentation and/or other materials provided with the 018 * distribution. 019 * 020 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 021 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 022 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 023 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, 024 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 025 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 026 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 027 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 028 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 029 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 030 * 031 * $JOMC: JdkLogger.java 4723 2013-01-03 08:50:05Z schulte $ 032 * 033 */ 034// </editor-fold> 035// SECTION-END 036package org.jomc.logging.ri.jdk; 037 038import java.util.logging.Level; 039 040// SECTION-START[Documentation] 041// <editor-fold defaultstate="collapsed" desc=" Generated Documentation "> 042/** 043 * Object management and configuration logging system implementation backed by JDK Logging. 044 * 045 * <dl> 046 * <dt><b>Identifier:</b></dt><dd>org.jomc.logging.ri.jdk.JdkLogger</dd> 047 * <dt><b>Name:</b></dt><dd>JOMC Logging ⁑ JDK Logging</dd> 048 * <dt><b>Specifications:</b></dt> 049 * <dd>org.jomc.logging.Logger @ 1.0</dd> 050 * <dd>org.jomc.spi.Listener @ 1.0</dd> 051 * <dt><b>Abstract:</b></dt><dd>No</dd> 052 * <dt><b>Final:</b></dt><dd>No</dd> 053 * <dt><b>Stateless:</b></dt><dd>Yes</dd> 054 * </dl> 055 * 056 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> 1.0 057 * @version 1.2 058 */ 059// </editor-fold> 060// SECTION-END 061// SECTION-START[Annotations] 062// <editor-fold defaultstate="collapsed" desc=" Generated Annotations "> 063@javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.4", comments = "See http://www.jomc.org/jomc/1.4/jomc-tools-1.4" ) 064// </editor-fold> 065// SECTION-END 066public final class JdkLogger 067 implements 068 org.jomc.logging.Logger, 069 org.jomc.spi.Listener 070{ 071 // SECTION-START[Constructors] 072 // <editor-fold defaultstate="collapsed" desc=" Generated Constructors "> 073 /** Creates a new {@code JdkLogger} instance. */ 074 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.4", comments = "See http://www.jomc.org/jomc/1.4/jomc-tools-1.4" ) 075 public JdkLogger() 076 { 077 // SECTION-START[Default Constructor] 078 super(); 079 // SECTION-END 080 } 081 // </editor-fold> 082 // SECTION-END 083 // SECTION-START[Logger] 084 085 public boolean isDebugEnabled() 086 { 087 return this.getLogger().isLoggable( Level.FINE ); 088 } 089 090 public void debug( final String message ) 091 { 092 this.log( Level.FINE, message, null ); 093 } 094 095 public void debug( final Throwable throwable ) 096 { 097 this.log( Level.FINE, throwable.getMessage(), throwable ); 098 } 099 100 public void debug( final String message, final Throwable throwable ) 101 { 102 this.log( Level.FINE, message, throwable ); 103 } 104 105 public boolean isErrorEnabled() 106 { 107 return this.getLogger().isLoggable( Level.SEVERE ); 108 } 109 110 public void error( final String message ) 111 { 112 this.log( Level.SEVERE, message, null ); 113 } 114 115 public void error( final Throwable throwable ) 116 { 117 this.log( Level.SEVERE, throwable.getMessage(), throwable ); 118 } 119 120 public void error( final String message, final Throwable throwable ) 121 { 122 this.log( Level.SEVERE, message, throwable ); 123 } 124 125 public boolean isFatalEnabled() 126 { 127 return this.getLogger().isLoggable( Level.SEVERE ); 128 } 129 130 public void fatal( final String message ) 131 { 132 this.log( Level.SEVERE, message, null ); 133 } 134 135 public void fatal( final Throwable throwable ) 136 { 137 this.log( Level.SEVERE, throwable.getMessage(), throwable ); 138 } 139 140 public void fatal( final String message, final Throwable throwable ) 141 { 142 this.log( Level.SEVERE, message, throwable ); 143 } 144 145 public boolean isInfoEnabled() 146 { 147 return this.getLogger().isLoggable( Level.INFO ); 148 } 149 150 public void info( final String message ) 151 { 152 this.log( Level.INFO, message, null ); 153 } 154 155 public void info( final Throwable throwable ) 156 { 157 this.log( Level.INFO, throwable.getMessage(), throwable ); 158 } 159 160 public void info( final String message, final Throwable throwable ) 161 { 162 this.log( Level.INFO, message, throwable ); 163 } 164 165 public boolean isTraceEnabled() 166 { 167 return this.getLogger().isLoggable( Level.FINEST ); 168 } 169 170 public void trace( final String message ) 171 { 172 this.log( Level.FINEST, message, null ); 173 } 174 175 public void trace( final Throwable throwable ) 176 { 177 this.log( Level.FINEST, throwable.getMessage(), throwable ); 178 } 179 180 public void trace( final String message, final Throwable throwable ) 181 { 182 this.log( Level.FINEST, message, throwable ); 183 } 184 185 public boolean isWarnEnabled() 186 { 187 return this.getLogger().isLoggable( Level.WARNING ); 188 } 189 190 public void warn( final String message ) 191 { 192 this.log( Level.WARNING, message, null ); 193 } 194 195 public void warn( final Throwable throwable ) 196 { 197 this.log( Level.WARNING, throwable.getMessage(), throwable ); 198 } 199 200 public void warn( final String message, final Throwable throwable ) 201 { 202 this.log( Level.WARNING, message, throwable ); 203 } 204 205 // SECTION-END 206 // SECTION-START[Listener] 207 public void onLog( final Level level, final String message, final Throwable throwable ) 208 { 209 if ( level != null ) 210 { 211 if ( level.equals( Level.CONFIG ) || level.equals( Level.FINE ) ) 212 { 213 this.getObjectManagementLogger().debug( message, throwable ); 214 } 215 else if ( level.equals( Level.FINER ) || level.equals( Level.FINEST ) ) 216 { 217 this.getObjectManagementLogger().trace( message, throwable ); 218 } 219 else if ( level.equals( Level.INFO ) ) 220 { 221 this.getObjectManagementLogger().info( message, throwable ); 222 } 223 else if ( level.equals( Level.SEVERE ) ) 224 { 225 this.getObjectManagementLogger().error( message, throwable ); 226 } 227 else if ( level.equals( Level.WARNING ) ) 228 { 229 this.getObjectManagementLogger().warn( message, throwable ); 230 } 231 else 232 { 233 this.getObjectManagementLogger().trace( message, throwable ); 234 } 235 } 236 } 237 238 // SECTION-END 239 // SECTION-START[JdkLogger] 240 /** 241 * Gets the JDK logger backing the instance. 242 * 243 * @return The JDK logger backing the instance. 244 * 245 * @see #getName() 246 * @see java.util.logging.Logger#getLogger(java.lang.String) 247 */ 248 public java.util.logging.Logger getLogger() 249 { 250 return java.util.logging.Logger.getLogger( this.getName() ); 251 } 252 253 private void log( final Level level, final String msg, final Throwable t ) 254 { 255 if ( this.getLogger().isLoggable( level ) ) 256 { 257 StackTraceElement caller; 258 final Throwable x = new Throwable(); 259 final StackTraceElement[] elements = x.getStackTrace(); 260 261 String cname = "unknown"; 262 String method = "unknown"; 263 264 if ( elements != null && elements.length >= this.getStackDepth() ) 265 { 266 caller = elements[this.getStackDepth()]; 267 cname = caller.getClassName(); 268 method = caller.getMethodName(); 269 } 270 271 if ( t == null ) 272 { 273 this.getLogger().logp( level, cname, method, msg ); 274 } 275 else 276 { 277 this.getLogger().logp( level, cname, method, msg, t ); 278 } 279 } 280 } 281 282 // SECTION-END 283 // SECTION-START[Dependencies] 284 // <editor-fold defaultstate="collapsed" desc=" Generated Dependencies "> 285 /** 286 * Gets the {@code <ObjectManagementLogger>} dependency. 287 * <p> 288 * This method returns the {@code <JOMC Logging ⁑ JDK Logging>} object of the {@code <org.jomc.logging.Logger>} specification at specification level 1.0. 289 * That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance. 290 * </p> 291 * <p><strong>Properties:</strong> 292 * <table border="1" width="100%" cellpadding="3" cellspacing="0"> 293 * <tr class="TableSubHeadingColor"> 294 * <th align="left" scope="col" nowrap><b>Name</b></th> 295 * <th align="left" scope="col" nowrap><b>Type</b></th> 296 * <th align="left" scope="col" nowrap><b>Documentation</b></th> 297 * </tr> 298 * <tr class="TableRow"> 299 * <td align="left" valign="top" nowrap>{@code <name>}</td> 300 * <td align="left" valign="top" nowrap>{@code java.lang.String}</td> 301 * <td align="left" valign="top">Name of the logger object management events are logged with.</td> 302 * </tr> 303 * <tr class="TableRow"> 304 * <td align="left" valign="top" nowrap>{@code <stackDepth>}</td> 305 * <td align="left" valign="top" nowrap>{@code int}</td> 306 * <td align="left" valign="top"></td> 307 * </tr> 308 * </table> 309 * </p> 310 * <dl> 311 * <dt><b>Final:</b></dt><dd>No</dd> 312 * </dl> 313 * @return Logger object management events are logged with. 314 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails. 315 */ 316 @SuppressWarnings("unused") 317 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.4", comments = "See http://www.jomc.org/jomc/1.4/jomc-tools-1.4" ) 318 private org.jomc.logging.Logger getObjectManagementLogger() 319 { 320 final org.jomc.logging.Logger _d = (org.jomc.logging.Logger) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "ObjectManagementLogger" ); 321 assert _d != null : "'ObjectManagementLogger' dependency not found."; 322 return _d; 323 } 324 // </editor-fold> 325 // SECTION-END 326 // SECTION-START[Properties] 327 // <editor-fold defaultstate="collapsed" desc=" Generated Properties "> 328 /** 329 * Gets the value of the {@code <name>} property. 330 * <p><dl> 331 * <dt><b>Final:</b></dt><dd>No</dd> 332 * </dl></p> 333 * @return Name of the component events are logged for. 334 * @throws org.jomc.ObjectManagementException if getting the property instance fails. 335 */ 336 @SuppressWarnings("unused") 337 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.4", comments = "See http://www.jomc.org/jomc/1.4/jomc-tools-1.4" ) 338 public java.lang.String getName() 339 { 340 final java.lang.String _p = (java.lang.String) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "name" ); 341 assert _p != null : "'name' property not found."; 342 return _p; 343 } 344 /** 345 * Gets the value of the {@code <stackDepth>} property. 346 * <p><dl> 347 * <dt><b>Final:</b></dt><dd>No</dd> 348 * </dl></p> 349 * @return Number of frames between the logger and the frame of the caller. 350 * @throws org.jomc.ObjectManagementException if getting the property instance fails. 351 */ 352 @SuppressWarnings("unused") 353 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.4", comments = "See http://www.jomc.org/jomc/1.4/jomc-tools-1.4" ) 354 private int getStackDepth() 355 { 356 final java.lang.Integer _p = (java.lang.Integer) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "stackDepth" ); 357 assert _p != null : "'stackDepth' property not found."; 358 return _p.intValue(); 359 } 360 // </editor-fold> 361 // SECTION-END 362 // SECTION-START[Messages] 363 // SECTION-END 364}