
Author: ceki Date: Thu Dec 4 19:20:11 2008 New Revision: 2055 Added: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/InsertFromJNDIAction.java Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/LoggerAction.java Log: Allow setting variables from JNDI Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java Thu Dec 4 19:20:11 2008 @@ -14,6 +14,7 @@ import ch.qos.logback.classic.joran.action.ConsolePluginAction; import ch.qos.logback.classic.joran.action.ContextNameAction; import ch.qos.logback.classic.joran.action.EvaluatorAction; +import ch.qos.logback.classic.joran.action.InsertFromJNDIAction; import ch.qos.logback.classic.joran.action.JMXConfiguratorAction; import ch.qos.logback.classic.joran.action.LayoutAction; import ch.qos.logback.classic.joran.action.LevelAction; @@ -45,6 +46,7 @@ rs.addRule(new Pattern("configuration"), new ConfigurationAction()); rs.addRule(new Pattern("configuration/contextName"), new ContextNameAction()); + rs.addRule(new Pattern("configuration/insertFromJNDI"), new InsertFromJNDIAction()); rs.addRule(new Pattern("*/evaluator"), new EvaluatorAction()); rs.addRule(new Pattern("*/evaluator/matcher"), new MatcherAction()); Added: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/InsertFromJNDIAction.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/InsertFromJNDIAction.java Thu Dec 4 19:20:11 2008 @@ -0,0 +1,74 @@ +/** + * Logback: the generic, reliable, fast and flexible logging framework. + * + * Copyright (C) 2000-2008, QOS.ch + * + * This library is free software, you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation. + */ + +package ch.qos.logback.classic.joran.action; + +import javax.naming.Context; +import javax.naming.NamingException; + +import org.xml.sax.Attributes; + +import ch.qos.logback.classic.util.JNDIUtil; +import ch.qos.logback.core.joran.action.Action; +import ch.qos.logback.core.joran.spi.InterpretationContext; +import ch.qos.logback.core.util.OptionHelper; + +/** + * Insert an env-entry found in JNDI as a new context variable + + * @author Ceki Gulcu + * + */ +public class InsertFromJNDIAction extends Action { + + public static String ENV_ENTRY_NAME_ATTR="env-entry-name"; + public static String AS_ATTR="as"; + + public void begin(InterpretationContext ec, String name, Attributes attributes) { + + int errorCount = 0; + String envEntryName = attributes.getValue(ENV_ENTRY_NAME_ATTR); + String asName = attributes.getValue(AS_ATTR); + String envEntryValue; + + if(OptionHelper.isEmpty(envEntryName)) { + String lineColStr = getLineColStr(ec); + addError("["+ENV_ENTRY_NAME_ATTR+"] missing, around "+lineColStr); + errorCount++; + } + + if(OptionHelper.isEmpty(asName)) { + String lineColStr = getLineColStr(ec); + addError("["+AS_ATTR+"] missing, around "+lineColStr); + errorCount++; + } + + if(errorCount != 0) { + return; + } + + try { + Context ctx = JNDIUtil.getInitialContext(); + envEntryValue = JNDIUtil.lookup(ctx, envEntryName); + if(OptionHelper.isEmpty(envEntryValue)) { + addError("["+envEntryName+"] has null or empty value"); + } else { + context.putProperty(asName, envEntryValue); + } + } catch (NamingException e) { + addError("Failed to lookup JNDI env-entry ["+envEntryName+"]"); + } + + + } + + public void end(InterpretationContext ec, String name) { + } +} Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/LoggerAction.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/LoggerAction.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/LoggerAction.java Thu Dec 4 19:20:11 2008 @@ -41,9 +41,8 @@ if (OptionHelper.isEmpty(loggerName)) { inError = true; - String line = ", around line " + getLineNumber(ec) + " column " - + getColumnNumber(ec); - String errorMsg = "No 'name' attribute in element " + name + line; + String aroundLine = getLineColStr(ec); + String errorMsg = "No 'name' attribute in element " + name + ", around " +aroundLine; addError(errorMsg); return; }