| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.ignite.logger.jcl; |
| |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| import org.apache.ignite.IgniteLogger; |
| import org.jetbrains.annotations.Nullable; |
| |
| import static org.apache.ignite.IgniteSystemProperties.IGNITE_QUIET; |
| |
| /** |
| * This logger wraps any JCL (<a target=_blank href="http://jakarta.apache.org/commons/logging/">Jakarta Commons Logging</a>) |
| * loggers. Implementation simply delegates to underlying JCL logger. This logger |
| * should be used by loaders that have JCL-based internal logging (e.g., Websphere). |
| * <p> |
| * Here is an example of configuring JCL logger in Ignite configuration Spring |
| * file to work over log4j implementation. Note that we use the same configuration file |
| * as we provide by default: |
| * <pre name="code" class="xml"> |
| * ... |
| * <property name="gridLogger"> |
| * <bean class="org.apache.ignite.logger.jcl.JclLogger"> |
| * <constructor-arg type="org.apache.commons.logging.Log"> |
| * <bean class="org.apache.commons.logging.impl.Log42JLogger"> |
| * <constructor-arg type="java.lang.String" value="config/ignite-log4j.xml"/> |
| * </bean> |
| * </constructor-arg> |
| * </bean> |
| * </property> |
| * ... |
| * </pre> |
| * If you are using system properties to configure JCL logger use following configuration: |
| * <pre name="code" class="xml"> |
| * ... |
| * <property name="gridLogger"> |
| * <bean class="org.apache.ignite.logger.jcl.JclLogger"/> |
| * </property> |
| * ... |
| * </pre> |
| * And the same configuration if you'd like to configure Ignite in your code: |
| * <pre name="code" class="java"> |
| * IgniteConfiguration cfg = new IgniteConfiguration(); |
| * ... |
| * IgniteLogger log = new JclLogger(new Log4J2Logger("config/ignite-log4j.xml")); |
| * ... |
| * cfg.setGridLogger(log); |
| * </pre> |
| * or following for the configuration by means of system properties: |
| * <pre name="code" class="java"> |
| * IgniteConfiguration cfg = new IgniteConfiguration(); |
| * ... |
| * IgniteLogger log = new JclLogger(); |
| * ... |
| * cfg.setGridLogger(log); |
| * </pre> |
| * |
| * <p> |
| * It's recommended to use Ignite logger injection instead of using/instantiating |
| * logger in your task/job code. See {@link org.apache.ignite.resources.LoggerResource} annotation about logger |
| * injection. |
| */ |
| public class JclLogger implements IgniteLogger { |
| /** JCL implementation proxy. */ |
| private Log impl; |
| |
| /** Quiet flag. */ |
| private final boolean quiet; |
| |
| /** |
| * Creates new logger. |
| */ |
| public JclLogger() { |
| this(LogFactory.getLog(JclLogger.class.getName())); |
| } |
| |
| /** |
| * Creates new logger with given implementation. |
| * |
| * @param impl JCL implementation to use. |
| */ |
| public JclLogger(Log impl) { |
| assert impl != null; |
| |
| this.impl = impl; |
| |
| quiet = Boolean.valueOf(System.getProperty(IGNITE_QUIET, "true")); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public IgniteLogger getLogger(Object ctgr) { |
| return new JclLogger(LogFactory.getLog( |
| ctgr instanceof Class ? ((Class)ctgr).getName() : String.valueOf(ctgr))); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void trace(String msg) { |
| impl.trace(msg); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void debug(String msg) { |
| impl.debug(msg); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void info(String msg) { |
| impl.info(msg); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void warning(String msg) { |
| impl.warn(msg); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void warning(String msg, @Nullable Throwable e) { |
| impl.warn(msg, e); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void error(String msg) { |
| impl.error(msg); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean isQuiet() { |
| return quiet; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void error(String msg, @Nullable Throwable e) { |
| impl.error(msg, e); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean isTraceEnabled() { |
| return impl.isTraceEnabled(); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean isDebugEnabled() { |
| return impl.isDebugEnabled(); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean isInfoEnabled() { |
| return impl.isInfoEnabled(); |
| } |
| |
| /** {@inheritDoc} */ |
| @Nullable @Override public String fileName() { |
| return null; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public String toString() { |
| return "JclLogger [impl=" + impl + ']'; |
| } |
| } |