/* * Copyright 2002-2011 the original author or authors. * * Licensed 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.springframework.flex.core; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import flex.messaging.config.ConfigMap; import flex.messaging.log.AbstractTarget; import flex.messaging.log.LogEvent; /** * BlazeDS Logging target that logs messages using standard apache commons-logging. Configuration: * <b>services-config.xml</b> * * <pre> * <logging> * <target class="org.springframework.flex.core.CommonsLoggingTarget" level="All"> * <properties> * <categoryPrefix>blazeds</categoryPrefix> * </properties> * </target> * </logging> * </pre> * * <b>Underlying Logger Configuration (e.g. log4j.xml)</b> * * <pre> * <log name="blazeds" additivity="false"> * <level value="DEBUG" /> * </log> * </pre> * * <b>Following Categories are available in BlazeDS/LCDS:</b> * <ul> * <li>Configuration</li> * <li>DataService.General</li> * <li>DataService.Hibernate</li> * <li>DataService.Transaction</li> * <li>Endpoint.*</li> * <li>Endpoint.AMF</li> * <li>Endpoint.HTTP</li> * <li>Endpoint.RTMP</li> * <li>Endpoint.Deserialization</li> * <li>Endpoint.General</li> * <li>Message.*</li> * <li>Message.Command.*</li> * <li>Message.Command.operation-name where operation-name is one of the following: subscribe, unsubscribe, poll, * poll_interval, client_sync, server_ping,client_ping, cluster_request, login, logout</li> * <li>Message.General</li> * <li>Message.Data.*</li> * <li>Message.Data.operation-name where operation-name is one of the following: create, fill get, update, delete, * batched, multi_batch, transacted, page, count, get_or_create, create_and_sequence, get_sequence_id, association_add, * association_remove, fillids, refresh_fill, update_collection</li> * <li>Message.RPC</li> * <li>MessageSelector</li> * <li>Resource</li> * <li>Service.*</li> * <li>Service.Cluster</li> * <li>Service.HTTP</li> * <li>Service.Message</li> * <li>Service.Message.JMS (logs a warning if a durable JMS subscriber can't be unsubscribed successfully.)</li> * <li>Service.Remoting</li> * <li>Security</li> * </ul> * * @author Isaac Levin */ public class CommonsLoggingTarget extends AbstractTarget { protected String categoryPrefix; public CommonsLoggingTarget() { super(); this.categoryPrefix = null; } @Override public void initialize(String id, ConfigMap properties) { super.initialize(id, properties); this.categoryPrefix = properties.getPropertyAsString("categoryPrefix", null); } public void logEvent(LogEvent logevent) { String category = logevent.logger.getCategory(); if (this.categoryPrefix != null) { category = this.categoryPrefix + "." + category; } Log log = LogFactory.getLog(category); switch (logevent.level) { case LogEvent.FATAL: if (log.isFatalEnabled()) { log.fatal(logevent.message, logevent.throwable); } break; case LogEvent.ERROR: if (log.isErrorEnabled()) { log.error(logevent.message, logevent.throwable); } break; case LogEvent.WARN: if (log.isWarnEnabled()) { log.warn(logevent.message, logevent.throwable); } break; case LogEvent.INFO: if (log.isInfoEnabled()) { log.info(logevent.message, logevent.throwable); } break; case LogEvent.DEBUG: if (log.isDebugEnabled()) { log.debug(logevent.message, logevent.throwable); } break; case LogEvent.ALL: if (log.isTraceEnabled()) { log.trace(logevent.message, logevent.throwable); } break; default: break; } } }