From: <jde...@us...> - 2007-09-12 11:45:28
|
Revision: 4067 http://pcgen.svn.sourceforge.net/pcgen/?rev=4067&view=rev Author: jdempsey Date: 2007-09-12 04:45:19 -0700 (Wed, 12 Sep 2007) Log Message: ----------- Fix bug: Debug not going to debug console - Allow logging level to be changed via UI - Set default level to LSTWARN Issue#: 1786965 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/gui/MainDebug.java Trunk/pcgen/code/src/java/pcgen/gui/PCGen_Frame1.java Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties Trunk/pcgen/code/src/java/pcgen/util/Logging.java Trunk/pcgen/logging.properties Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/gui/LoggingLevelMenu.java Added: Trunk/pcgen/code/src/java/pcgen/gui/LoggingLevelMenu.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/LoggingLevelMenu.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/gui/LoggingLevelMenu.java 2007-09-12 11:45:19 UTC (rev 4067) @@ -0,0 +1,167 @@ +/* + * LoggingLevelMenu.java + * Copyright 2007 (C) James Dempsey + * + * 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; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 11/09/2007 + * + * $Id$ + */ +package pcgen.gui; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; + +import javax.swing.ButtonGroup; +import javax.swing.JMenu; +import javax.swing.JRadioButtonMenuItem; + +import pcgen.gui.utils.Utility; +import pcgen.util.Logging; +import pcgen.util.PropertyFactory; + +/** + * code>LoggingLevelMenu</code> is a menu which allows the user + * to control the level of logging in use. + * + * Last Editor: $Author$ + * Last Edited: $Date$ + * + * @author James Dempsey <jde...@us...> + * @version $Revision$ + */ +final class LoggingLevelMenu extends JMenu +{ + static final long serialVersionUID = -6751569845505079621L; + private ButtonGroup levelGroup = null; + private CheckBoxListener checkBoxHandler = new CheckBoxListener(); + private JRadioButtonMenuItem[] levelMenuItems = null; + private List<Level> levelList = new ArrayList<Level>(); + + /** + * Create a new LoggingLevelMenu instance based on the supported + * log levels. + */ + LoggingLevelMenu() + { + try + { + buildMenu(); + setText(PropertyFactory.getString("in_mnuLoggingLevel")); + setMnemonic(PropertyFactory.getMnemonic("in_mn_mnuLoggingLevel")); + Utility.setDescription(this, PropertyFactory.getString("in_mnuLoggingLevelTip")); + updateMenu(); + } + catch (Exception e) + { + Logging.errorPrint("Exception while initing the form", e); + } + } + + /** + * Create the sub components of the menu, one submenu for + * each supported logging level. + */ + private void buildMenu() + { + levelList = Logging.getLoggingLevels(); + final int levelCount = levelList.size(); + + if (levelList.size() == 0) + { + return; + } + + levelMenuItems = new JRadioButtonMenuItem[levelCount]; + + levelGroup = new ButtonGroup(); + for (int i = 0; i < levelCount; ++i) + { + JMenu mnuLevel = this; + + Level lvl = levelList.get(i); + + // + // If there are more tokens, then add a JMenu with this description + // unless one already exists. + // + levelMenuItems[i] = + new JRadioButtonMenuItem(PropertyFactory + .getString("in_loglvl" + lvl.getName()), false); + levelGroup.add(mnuLevel.add(levelMenuItems[i])); + Utility.setDescription(levelMenuItems[i], PropertyFactory.getString("in_loglvl" + lvl.getName() + "Tip")); + levelMenuItems[i].addActionListener(checkBoxHandler); + add(levelMenuItems[i]); + } + + // + // Look for &'s in the menu text...translate into mnemonic. NOTE "&&" translates to "&" + // + for (int i = 0; i < levelMenuItems.length; ++i) + { + Utility.setTextAndMnemonic(levelMenuItems[i], levelMenuItems[i].getText()); + } + } + + /** + * Update the selected menu item to match the currently + * selected logging level. + */ + public void updateMenu() + { + if (levelMenuItems != null) + { + for (int i = 0; i < levelMenuItems.length; ++i) + { + if (Logging.getCurrentLoggingLevel() == levelList.get(i)) + { + levelMenuItems[i].setSelected(true); + break; + } + } + } + } + + /** + * This class is used to respond to clicks on the check boxes. + */ + private final class CheckBoxListener implements ActionListener + { + /* (non-Javadoc) + * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) + */ + public void actionPerformed(ActionEvent actionEvent) + { + final Object source = actionEvent.getSource(); + if (source == null) + { + return; + } + + // Switch to the selected logging level + for (int i = 0; i < levelMenuItems.length; i++) + { + if (source == levelMenuItems[i]) + { + Logging.setCurrentLoggingLevel(levelList.get(i)); + } + } + } + } +} Property changes on: Trunk/pcgen/code/src/java/pcgen/gui/LoggingLevelMenu.java ___________________________________________________________________ Name: svn:keywords + Author Revision Date Id Name: svn:eol-style + native Modified: Trunk/pcgen/code/src/java/pcgen/gui/MainDebug.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/MainDebug.java 2007-09-12 07:27:51 UTC (rev 4066) +++ Trunk/pcgen/code/src/java/pcgen/gui/MainDebug.java 2007-09-12 11:45:19 UTC (rev 4067) @@ -34,6 +34,7 @@ import java.util.MissingResourceException; import java.util.ResourceBundle; import java.util.logging.Handler; +import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; @@ -75,9 +76,8 @@ MainDebug() { initComponents(); - ConsoleHandler ch = new ConsoleHandler(); - Logger.getLogger("pcgen").addHandler(ch); - Logger.getLogger("plugin").addHandler(ch); + DebugHandler ch = new DebugHandler(); + Logging.registerHandler(ch); System.setOut(new DebugStream(System.out)); System.setErr(System.out); @@ -275,9 +275,15 @@ } } - private final class ConsoleHandler extends Handler + public final class DebugHandler extends Handler { + DebugHandler() + { + super(); + setLevel(Level.FINER); + } + @Override public void close() throws SecurityException { Modified: Trunk/pcgen/code/src/java/pcgen/gui/PCGen_Frame1.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/PCGen_Frame1.java 2007-09-12 07:27:51 UTC (rev 4066) +++ Trunk/pcgen/code/src/java/pcgen/gui/PCGen_Frame1.java 2007-09-12 11:45:19 UTC (rev 4067) @@ -2659,6 +2659,7 @@ JMenuItem treasureItem; JOpenRecentMenu openRecentPCMenu; JOpenRecentMenu openRecentPartyMenu; + private LoggingLevelMenu loggingMenu; /** Instantiated popup frame {@link PrintFrame}. */ PrintFrame printFrame = null; @@ -2985,6 +2986,7 @@ //Debug Menu JMenu debugMenu = Utility.createMenu("mnuDebug", null, true); + loggingMenu = new LoggingLevelMenu(); debugMode = new JCheckBoxMenuItem(); debugMode.setText(PropertyFactory.getString("in_mnuDebugMode")); debugMode.setMnemonic(PropertyFactory.getMnemonic("in_mn_mnuDebugMode")); @@ -2995,6 +2997,7 @@ public void actionPerformed(ActionEvent e) { Logging.setDebugMode(debugMode.isSelected()); + loggingMenu.updateMenu(); if (exportPopup != null) { @@ -3004,6 +3007,9 @@ }); debugMenu.add(debugMode); + // Logging Level menu + debugMenu.add(loggingMenu); + JMenuItem consoleMenuItem = Utility.createMenuItem("mnuDebugConsole", new ActionListener() { @@ -3464,9 +3470,8 @@ } catch(Exception e) { - e.getMessage(); - e.printStackTrace(); - System.out.println(event.toString()); + //Logging.reportAllThreads(); + Logging.errorPrint("Uncaught error - ignoring", e); } finally { Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2007-09-12 07:27:51 UTC (rev 4066) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2007-09-12 11:45:19 UTC (rev 4067) @@ -4054,3 +4054,22 @@ in_uichooser_bad_param=Unrecognised parameter "{0}" for CHOOSE:USERINPUT in_character_sheet=Character Sheet + +# Logging level menu +in_mnuLoggingLevel=Logging Level +in_mn_mnuLoggingLevel=L +in_mnuLoggingLevelTip=Set the level of information you want to see in the console. +in_loglvlSEVERE=Errors +in_loglvlSEVERETip=Only report on program errors. +in_loglvlLSTERROR=Data Errors +in_loglvlLSTERRORTip=Report on data errors and program errors. +in_loglvlWARNING=Warnings +in_loglvlWARNINGTip=Report on program warnings and all higher levels. +in_loglvlLSTWARN=Data Warnings +in_loglvlLSTWARNTip=Report on data warnings and all higher levels. +in_loglvlINFO=Information +in_loglvlINFOTip=Report on program info messages and all higher levels. +in_loglvlLSTINFO=Data Info +in_loglvlLSTINFOTip=Report on data info messages and all higher levels. +in_loglvlFINER=Debug +in_loglvlFINERTip=Report on debug output and all higher levels. Modified: Trunk/pcgen/code/src/java/pcgen/util/Logging.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/Logging.java 2007-09-12 07:27:51 UTC (rev 4066) +++ Trunk/pcgen/code/src/java/pcgen/util/Logging.java 2007-09-12 11:45:19 UTC (rev 4067) @@ -24,8 +24,11 @@ import java.io.File; import java.io.IOException; import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; @@ -50,9 +53,15 @@ /** Log level for LST error output. */ public static final Level LST_ERROR = PCGenLogLevel.LST_ERROR; + /** Logging level for code warnings. */ + public static final Level WARNING = Level.WARNING; + /** Logging level for LST warnings such as deprectaed syntax use. */ public static final Level LST_WARNING = PCGenLogLevel.LST_WARNING; + /** Logging level for code info. */ + public static final Level INFO = Level.INFO; + /** Logging level for LST information such as references to missing items in PRE or CHOOSE tags. */ public static final Level LST_INFO = PCGenLogLevel.LST_INFO; @@ -79,8 +88,9 @@ { p.put("java.util.logging.config.file", propsFile.getAbsolutePath()); } - - // Get Java Loggign to read in the config. + //System.out.println("Using log settings from " + propsFile.getAbsolutePath()); + + // Get Java Logging to read in the config. try { LogManager.getLogManager().readConfiguration(); @@ -406,4 +416,49 @@ System.out.println(b); System.out.println("===== end listing ====="); } + + /** + * Register a new log handler. + * @param handler The handler to be registered. + */ + public static void registerHandler(Handler handler) + { + Logger.getLogger("").addHandler(handler); + } + + /** + * Return a list of the supported logging levels in + * descending order of rank. + * @return List of logging levels. + */ + public static List<Level> getLoggingLevels() + { + List<Level> levels = new ArrayList<Level>(); + levels.add(ERROR); + levels.add(LST_ERROR); + levels.add(WARNING); + levels.add(LST_WARNING); + levels.add(INFO); + levels.add(LST_INFO); + levels.add(DEBUG); + return levels; + } + + /** + * @return The current logging level for the main program. + */ + public static Level getCurrentLoggingLevel() + { + return Logger.getLogger("pcgen").getLevel(); + } + + /** + * Set the current logging level for the main program. + * @param level The new level + */ + public static void setCurrentLoggingLevel(Level level) + { + Logger.getLogger("pcgen").setLevel(level); + Logger.getLogger("plugin").setLevel(level); + } } Modified: Trunk/pcgen/logging.properties =================================================================== --- Trunk/pcgen/logging.properties 2007-09-12 07:27:51 UTC (rev 4066) +++ Trunk/pcgen/logging.properties 2007-09-12 11:45:19 UTC (rev 4067) @@ -14,15 +14,15 @@ # Note: If a level is enabled, all levels above it on this # list will also be enabled. # SEVERE (for all exceptions etc including NPEs) -# LST_ERROR (LST error output) -# LST_WARNING (LST warnings such as deprecated syntax use) +# LSTERROR (LST error output) # WARNING (for any code warnings) +# LSTWARN (LST warnings such as deprecated syntax use) # INFO (for any information messages such as memory on output sheet runs etc) -# LST_INFO (LST information such as references to missing items in PRE or CHOOSE tags.) +# LSTINFO (LST information such as references to missing items in PRE or CHOOSE tags.) # FINER (aka DEBUG for all code tracing info) # Set the default logging level for the all classes -.level = WARNING +.level = SEVERE # Set the default logging level for new ConsoleHandler instances # The highest level of the handler and the class is used, so best to @@ -37,6 +37,6 @@ # Set the logging level for the PCGen loggers. # Note: Add specific classes below using their fully qualified name -pcgen.level = WARNING -plugin.level = WARNING +pcgen.level = LSTWARN +plugin.level = LSTWARN #pcgen.gui.tabs.ability.AbilityInfoPanel = FINER \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |