1 /** 2 * Copyright (c) 2012-2013, JCabi.com 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 1) Redistributions of source code must retain the above 8 * copyright notice, this list of conditions and the following 9 * disclaimer. 2) Redistributions in binary form must reproduce the above 10 * copyright notice, this list of conditions and the following 11 * disclaimer in the documentation and/or other materials provided 12 * with the distribution. 3) Neither the name of the jcabi.com nor 13 * the names of its contributors may be used to endorse or promote 14 * products derived from this software without specific prior written 15 * permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT 19 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 21 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 22 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 28 * OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 package org.slf4j.impl; 31 32 import lombok.EqualsAndHashCode; 33 import lombok.ToString; 34 import org.apache.maven.plugin.logging.Log; 35 import org.slf4j.ILoggerFactory; 36 import org.slf4j.spi.LoggerFactoryBinder; 37 38 /** 39 * The binding of {@link ILoggerFactory} class with 40 * an actual instance of {@link ILoggerFactory} is 41 * performed using information returned by this class. 42 * 43 * <p>This is what you should do in your Maven plugin (before everything else): 44 * 45 * <pre> import org.apache.maven.plugin.AbstractMojo; 46 * import org.slf4j.impl.StaticLoggerBinder; 47 * public class MyMojo extends AbstractMojo { 48 * @Override 49 * public void execute() { 50 * StaticLoggerBinder.getSingleton().setMavenLog(this.getLog()); 51 * // ... all the rest 52 * } 53 * }</pre> 54 * 55 * <p>All SLF4J calls will be forwarded to Maven Log. 56 * 57 * <p>The class is thread-safe. 58 * 59 * @author Yegor Bugayenko (yegor@tpc2.com) 60 * @version $Id$ 61 * @since 0.1.6 62 * @see <a href="http://www.slf4j.org/faq.html#slf4j_compatible">SLF4J FAQ</a> 63 */ 64 @ToString 65 @EqualsAndHashCode(of = "loggers") 66 public final class StaticLoggerBinder implements LoggerFactoryBinder { 67 68 /** 69 * Declare the version of the SLF4J API this implementation is compiled 70 * against. The value of this field is usually modified with each release. 71 */ 72 @SuppressWarnings("PMD.LongVariable") 73 public static final String REQUESTED_API_VERSION = "1.6"; 74 75 /** 76 * The unique instance of this class. 77 */ 78 private static final StaticLoggerBinder SINGLETON = 79 new StaticLoggerBinder(); 80 81 /** 82 * The {@link ILoggerFactory} instance returned by the 83 * {@link #getLoggerFactory()} method should always be 84 * the same object. 85 */ 86 private final transient JcabiLoggers loggers = new JcabiLoggers(); 87 88 /** 89 * Private ctor to avoid direct instantiation of the class. 90 */ 91 private StaticLoggerBinder() { 92 // intentionally empty 93 } 94 95 /** 96 * Return the singleton of this class. 97 * @return The StaticLoggerBinder singleton 98 */ 99 public static StaticLoggerBinder getSingleton() { 100 return StaticLoggerBinder.SINGLETON; 101 } 102 103 /** 104 * Set Maven Log. 105 * @param log The log from Maven plugin 106 */ 107 public void setMavenLog(final Log log) { 108 this.loggers.setMavenLog(log); 109 } 110 111 /** 112 * {@inheritDoc} 113 */ 114 @Override 115 public ILoggerFactory getLoggerFactory() { 116 return this.loggers; 117 } 118 119 /** 120 * {@inheritDoc} 121 */ 122 @Override 123 public String getLoggerFactoryClassStr() { 124 return this.loggers.getClass().getName(); 125 } 126 127 }