Author: sletellier Date: 2012-06-08 11:52:04 +0200 (Fri, 08 Jun 2012) New Revision: 2326 Url: http://nuiton.org/repositories/revision/jaxx/2326 Log: refs #2124 Add ui to display log from log4j appender Use applicationConfig to specify appender level and pattern to use Add init method to initialize JAXXLog4jAppender Added: trunk/jaxx-demo/src/main/resources/icons/action-reload-log.png Modified: trunk/jaxx-demo/pom.xml trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUIHandler.java trunk/jaxx-demo/src/main/java/jaxx/demo/RunDemo.java trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties trunk/jaxx-demo/src/main/resources/log4j.properties trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/log/JAXXLog4jHandler.java trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/log/JAXXLog4jUI.jaxx Modified: trunk/jaxx-demo/pom.xml =================================================================== --- trunk/jaxx-demo/pom.xml 2012-06-06 17:10:47 UTC (rev 2325) +++ trunk/jaxx-demo/pom.xml 2012-06-08 09:52:04 UTC (rev 2326) @@ -132,7 +132,6 @@ <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> - <scope>runtime</scope> </dependency> </dependencies> Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java 2012-06-06 17:10:47 UTC (rev 2325) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoConfig.java 2012-06-08 09:52:04 UTC (rev 2326) @@ -25,6 +25,11 @@ package jaxx.demo; +import java.beans.PropertyChangeListener; +import java.io.IOException; +import java.io.InputStream; +import java.util.Locale; +import java.util.Properties; import jaxx.demo.feature.nav.NavDemo; import jaxx.runtime.JAXXUtil; import org.apache.commons.logging.Log; @@ -33,12 +38,6 @@ import org.nuiton.util.Version; import org.nuiton.util.VersionUtil; -import java.beans.PropertyChangeListener; -import java.io.IOException; -import java.io.InputStream; -import java.util.Locale; -import java.util.Properties; - import static org.nuiton.i18n.I18n._; /** @@ -66,6 +65,10 @@ public static final String PROPERTY_FONT_SIZE = "fontSize"; + public static final String PROPERTY_LOG_LEVEL = "logLevel"; + + public static final String PROPERTY_LOG_PATTERN_LAYOUT = "logPatternLayout"; + public DemoConfig() { setConfigFileName(Option.CONFIG_FILE.defaultValue); @@ -135,6 +138,16 @@ return result; } + public String getLogLevel() { + String level = getOption(Option.LOG_LEVEL.key); + return level; + } + + public String getLogPatternLayout() { + String result = getOption(Option.LOG_PATTERN_LAYOUT.key); + return result; + } + public void setFullscreen(boolean fullscreen) { Object oldValue = null; setOption(Option.FULL_SCREEN.key, fullscreen + ""); @@ -155,6 +168,18 @@ firePropertyChange(PROPERTY_FONT_SIZE, oldValue, newFontSize); } + public void setLogLevel(String logLevel) { + String oldValue = getLogLevel(); + setOption(Option.LOG_LEVEL.key, logLevel); + firePropertyChange(PROPERTY_LOG_LEVEL, oldValue, logLevel); + } + + public void setLogPatternLayout(String logPatternLayout) { + String oldValue = getLogPatternLayout(); + setOption(Option.LOG_PATTERN_LAYOUT.key, logPatternLayout); + firePropertyChange(PROPERTY_LOG_PATTERN_LAYOUT, oldValue, logPatternLayout); + } + /** * Save configuration, in user home directory using the * {@link #getConfigFileName}. Default, env and commande line note saved @@ -225,6 +250,20 @@ Float.class, false, false), + LOG_LEVEL( + "ui." + PROPERTY_LOG_LEVEL, + _("jaxxdemo.config.ui.logLevel"), + "INFO", + String.class, + false, + false), + LOG_PATTERN_LAYOUT( + "ui." + PROPERTY_LOG_PATTERN_LAYOUT, + _("jaxxdemo.config.ui.logPatternLayout"), + "%5p [%t] (%F:%L) %M - %m%n", + String.class, + false, + false), DEMO_PATH( "ui.demo.path", _("jaxxdemo.config.ui.demo.path"), Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUIHandler.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUIHandler.java 2012-06-06 17:10:47 UTC (rev 2325) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoUIHandler.java 2012-06-08 09:52:04 UTC (rev 2326) @@ -390,6 +390,22 @@ } }; + final Runnable reloadLogAppenderCallback = new Runnable() { + + @Override + public void run() { + if (log.isInfoEnabled()) { + log.info("will reload log appender"); + } + DefaultApplicationContext context = RunDemo.get(); + DemoUI ui = getUI(context); + DemoConfig config = ui.getConfig(); + + // init jaxx logger + JAXXLog4jUI.init(config.getLogLevel(), config.getLogPatternLayout()); + } + }; + public void showConfig(JAXXContext context) { DemoUI ui = getUI(context); DemoConfig config = ui.getConfig(); @@ -406,6 +422,11 @@ SwingUtil.createActionIcon("reload-application"), reloadApplicationCallback); + helper.registerCallBack("log", + n_("demo.action.reload.logAppender"), + SwingUtil.createActionIcon("reload-log"), + reloadLogAppenderCallback); + // categorie repertoires helper.addCategory(n_("jaxxdemo.config.category.directories"), @@ -429,6 +450,14 @@ helper.setOptionPropertyName(DemoConfig.PROPERTY_LOCALE); helper.setOptionCallBack("ui"); + helper.addOption(DemoConfig.Option.LOG_LEVEL); + helper.setOptionPropertyName(DemoConfig.PROPERTY_LOG_LEVEL); + helper.setOptionCallBack("log"); + + helper.addOption(DemoConfig.Option.LOG_PATTERN_LAYOUT); + helper.setOptionPropertyName(DemoConfig.PROPERTY_LOG_PATTERN_LAYOUT); + helper.setOptionCallBack("log"); + helper.buildUI(context, "jaxxdemo.config.category.other"); helper.displayUI(ui, false); @@ -448,7 +477,7 @@ public void showLogs(DemoUI ui) { - JAXXLog4jUI log4jUI = new JAXXLog4jUI("jaxxDemoAppender"); + JAXXLog4jUI log4jUI = new JAXXLog4jUI(); String title = _("jaxxdemo.title.showLog"); log4jUI.setTitle(title); log4jUI.showInDialog(ui, false); Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/RunDemo.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/RunDemo.java 2012-06-06 17:10:47 UTC (rev 2325) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/RunDemo.java 2012-06-08 09:52:04 UTC (rev 2326) @@ -25,22 +25,22 @@ package jaxx.demo; +import java.util.Arrays; +import java.util.Date; import jaxx.demo.entities.DemoDecoratorProvider; import jaxx.demo.tree.DemoDataProvider; import jaxx.demo.tree.DemoTreeHelper; import jaxx.runtime.SwingUtil; import jaxx.runtime.context.DefaultApplicationContext; -import org.nuiton.util.decorator.DecoratorProvider; import jaxx.runtime.swing.ErrorDialogUI; +import jaxx.runtime.swing.log.JAXXLog4jUI; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.i18n.I18n; import org.nuiton.i18n.init.DefaultI18nInitializer; import org.nuiton.util.StringUtil; +import org.nuiton.util.decorator.DecoratorProvider; -import java.util.Arrays; -import java.util.Date; - import static org.nuiton.i18n.I18n._; /** @author tchemit <chemit@codelutin.com> */ @@ -103,8 +103,10 @@ log.info(_("jaxxdemo.message.config.loaded", config.getVersion())); + // init jaxx logger + JAXXLog4jUI.init(config.getLogLevel(), config.getLogPatternLayout()); + // prepare ui look&feel and load ui properties - try { SwingUtil.initNimbusLoookAndFeel(); } catch (Exception e) { Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties =================================================================== --- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties 2012-06-06 17:10:47 UTC (rev 2325) +++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties 2012-06-08 09:52:04 UTC (rev 2326) @@ -105,6 +105,7 @@ close2=Disable 2 close3=Disable 3 demo.action.reload.application=Reload application +demo.action.reload.logAppender= demo.action.reload.ui=Reload UI edit=Edit edit2=Edit 2 @@ -185,6 +186,8 @@ jaxxdemo.config.ui.fontSize=default font size to use in sources jaxxdemo.config.ui.fullscreen=To change the screen mode (true for full screen) jaxxdemo.config.ui.locale=Language used in application +jaxxdemo.config.ui.logLevel= +jaxxdemo.config.ui.logPatternLayout= jaxxdemo.feature=Features jaxxdemo.feature.databinding=Data Binding jaxxdemo.feature.nav=Jaxx nav API Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties =================================================================== --- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties 2012-06-06 17:10:47 UTC (rev 2325) +++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties 2012-06-08 09:52:04 UTC (rev 2326) @@ -105,6 +105,7 @@ close2=Fermer 2 close3=Fermer 3 demo.action.reload.application=Redemarrer l'application +demo.action.reload.logAppender= demo.action.reload.ui=Recharger l'interface graphique edit=Editer edit2=Editer 2 @@ -185,6 +186,8 @@ jaxxdemo.config.ui.fontSize=La taille de la police à utiliser pour visualiser dans les sources jaxxdemo.config.ui.fullscreen=Pour afficher l'aplication en mode pleine écran jaxxdemo.config.ui.locale=La langue utilisée par l'application +jaxxdemo.config.ui.logLevel= +jaxxdemo.config.ui.logPatternLayout= jaxxdemo.feature=Fonctionnalités jaxxdemo.feature.databinding=Data binding jaxxdemo.feature.nav=API JAXX pour les arbres Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties =================================================================== --- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties 2012-06-06 17:10:47 UTC (rev 2325) +++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties 2012-06-08 09:52:04 UTC (rev 2326) @@ -105,6 +105,7 @@ close2=Fermer 2 close3=Fermer 3 demo.action.reload.application=Redemarrer l'application +demo.action.reload.logAppender= demo.action.reload.ui=Recharger l'interface graphique edit=Editer edit2=Editer 2 @@ -185,6 +186,8 @@ jaxxdemo.config.ui.fontSize=La taille de la police à utiliser pour visualiser dans les sources jaxxdemo.config.ui.fullscreen=Pour afficher l'aplication en mode pleine écran jaxxdemo.config.ui.locale=La langue utilisée par l'application +jaxxdemo.config.ui.logLevel= +jaxxdemo.config.ui.logPatternLayout= jaxxdemo.feature=Fonctionnalités jaxxdemo.feature.databinding=Data binding jaxxdemo.feature.nav=API JAXX pour les arbres Added: trunk/jaxx-demo/src/main/resources/icons/action-reload-log.png =================================================================== (Binary files differ) Property changes on: trunk/jaxx-demo/src/main/resources/icons/action-reload-log.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/jaxx-demo/src/main/resources/log4j.properties =================================================================== --- trunk/jaxx-demo/src/main/resources/log4j.properties 2012-06-06 17:10:47 UTC (rev 2325) +++ trunk/jaxx-demo/src/main/resources/log4j.properties 2012-06-08 09:52:04 UTC (rev 2326) @@ -29,11 +29,6 @@ log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n -# JAXX output -log4j.appender.jaxxDemoAppender=jaxx.runtime.swing.log.JAXXLog4jAppender -log4j.appender.jaxxDemoAppender.layout=org.apache.log4j.PatternLayout -log4j.appender.jaxxDemoAppender.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n - log4j.logger.jaxx=INFO #log4j.logger.jaxx.demo=INFO log4j.logger.jaxx.demo.tree=DEBUG Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/log/JAXXLog4jHandler.java =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/log/JAXXLog4jHandler.java 2012-06-06 17:10:47 UTC (rev 2325) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/log/JAXXLog4jHandler.java 2012-06-08 09:52:04 UTC (rev 2326) @@ -39,7 +39,9 @@ import jaxx.runtime.SwingUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.log4j.Level; import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; /** * @author sletellier <letellier@codelutin.com> @@ -50,10 +52,36 @@ protected JAXXLog4jUI ui; + protected static JAXXLog4jAppender appender; + public JAXXLog4jHandler(JAXXLog4jUI ui) { this.ui = ui; } + /** + * Init {@link JAXXLog4jAppender} with level INFO and pattern : %5p [%t] (%F:%L) %M - %m%n + */ + public static void init() { + init("INFO", "%5p [%t] (%F:%L) %M - %m%n"); + } + + /** + * Init {@link JAXXLog4jAppender} with specific {@link Level} and {@link PatternLayout} + * + * @param level specify log4j {@link Level} + * @param patternLayout log4j {@link PatternLayout} to display + */ + public static void init(String level, String patternLayout) { + Logger logger = Logger.getRootLogger(); + + if (appender == null) { + appender = new JAXXLog4jAppender(); + logger.addAppender(appender); + } + appender.setLevel(Level.toLevel(level)); + appender.setLayout(new PatternLayout(patternLayout)); + } + final protected Action closeAction = new AbstractAction("close") { private static final long serialVersionUID = 1L; @@ -68,16 +96,8 @@ } }; - public JAXXLog4jAppender getAppender(String appenderName) { - - Logger logger = Logger.getRootLogger(); - try { - JAXXLog4jAppender appender = (JAXXLog4jAppender) logger.getAppender(appenderName); - return appender; - } catch (ClassCastException eee) { - log.error("Appender '" + appenderName + "' must be an jaxx.runtime.swing.log.JAXXLog4jAppender", eee); - throw eee; - } + public JAXXLog4jAppender getAppender() { + return appender; } public void showInDialog(Frame ui, boolean undecorated) { Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/log/JAXXLog4jUI.jaxx =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/log/JAXXLog4jUI.jaxx 2012-06-06 17:10:47 UTC (rev 2325) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/log/JAXXLog4jUI.jaxx 2012-06-08 09:52:04 UTC (rev 2326) @@ -30,12 +30,24 @@ </import> <script><![CDATA[ - protected String appenderName; - public JAXXLog4jUI(String appenderName) { - this.appenderName = appenderName; + /** + * Init {@link JAXXLog4jAppender} with level INFO and pattern : %5p [%t] (%F:%L) %M - %m%n + */ + public static void init() { + JAXXLog4jHandler.init(); } + /** + * Init {@link JAXXLog4jAppender} with specific {@link Level} and {@link PatternLayout} + * + * @param level specify log4j {@link Level} + * @param patternLayout log4j {@link PatternLayout} to display + */ + public static void init(String level, String patternLayout) { + JAXXLog4jHandler.init(level, patternLayout); + } + public void showInDialog(Frame ui, boolean undecorated) { handler.showInDialog(ui, undecorated); } @@ -45,11 +57,11 @@ <JAXXLog4jHandler id='handler' constructorParams='this'/> - <JAXXLog4jAppender id='model' initializer='getHandler().getAppender(appenderName)'/> + <JAXXLog4jAppender id='model' initializer='getHandler().getAppender()'/> <JScrollPane constraints='BorderLayout.CENTER'> - <JTextArea id='logArea' - text='{model.getLogs()}'/> + <JEditorPane id='logArea' + text='{model.getLogs()}'/> </JScrollPane> <Table constraints='BorderLayout.SOUTH'>