1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.log4j.lf5.util; 18 19 import java.awt.Toolkit; 20 import java.util.Arrays; 21 import java.util.List; 22 23 import org.apache.log4j.lf5.LogLevel; 24 import org.apache.log4j.lf5.LogRecord; 25 import org.apache.log4j.lf5.viewer.LogBrokerMonitor; 26 27 /** 28 * <p>LogMonitorAdapter facilitates the usage of the LogMonitor</p> 29 * 30 * @author Richard Hurst 31 */ 32 33 // Contributed by ThoughtWorks Inc. 34 35 public class LogMonitorAdapter { 36 //-------------------------------------------------------------------------- 37 // Constants: 38 //-------------------------------------------------------------------------- 39 public static final int LOG4J_LOG_LEVELS = 0; 40 public static final int JDK14_LOG_LEVELS = 1; 41 //-------------------------------------------------------------------------- 42 // Protected Variables: 43 //-------------------------------------------------------------------------- 44 45 //-------------------------------------------------------------------------- 46 // Private Variables: 47 //-------------------------------------------------------------------------- 48 private LogBrokerMonitor _logMonitor; 49 private LogLevel _defaultLevel = null; 50 51 //-------------------------------------------------------------------------- 52 // Constructors: 53 //-------------------------------------------------------------------------- 54 private LogMonitorAdapter(List userDefinedLevels) { 55 super(); 56 // set the default level to be the first entry in the list 57 _defaultLevel = (LogLevel) userDefinedLevels.get(0); 58 _logMonitor = new LogBrokerMonitor(userDefinedLevels); 59 60 _logMonitor.setFrameSize(getDefaultMonitorWidth(), 61 getDefaultMonitorHeight()); 62 _logMonitor.setFontSize(12); 63 _logMonitor.show(); 64 } 65 //-------------------------------------------------------------------------- 66 // Public Methods: 67 //-------------------------------------------------------------------------- 68 /** 69 * <p>Creates an instance of LogMonitorAdapter using the 70 * log levels inticated by the parameter. Log4J and JDK1.4 both have default 71 * LogLevels which are set but these levels can be overriden.<p> 72 * 73 * @param loglevels An integer representing either Log4J or JDK1.4 logging levels 74 * @return LogMonitorAdapter 75 */ 76 public static LogMonitorAdapter newInstance(int loglevels) { 77 LogMonitorAdapter adapter; 78 if (loglevels == JDK14_LOG_LEVELS) { 79 adapter = newInstance(LogLevel.getJdk14Levels()); 80 adapter.setDefaultLevel(LogLevel.FINEST); 81 adapter.setSevereLevel(LogLevel.SEVERE); 82 } else { 83 adapter = newInstance(LogLevel.getLog4JLevels()); 84 adapter.setDefaultLevel(LogLevel.DEBUG); 85 adapter.setSevereLevel(LogLevel.FATAL); 86 } 87 return adapter; 88 } 89 90 /** 91 * <p>Creates an instance of LogMonitorAdapter using the specified LogLevels. 92 * The first LogLevel in the array is used as the default LogLevel unless 93 * changed using the setDefaultLevel method.<p> 94 * 95 * @param userDefined An array of user defined LogLevel objects. 96 * @return LogMonitorAdapter 97 */ 98 public static LogMonitorAdapter newInstance(LogLevel[] userDefined) { 99 if (userDefined == null) { 100 return null; 101 } 102 return newInstance(Arrays.asList(userDefined)); 103 } 104 105 /** 106 * <p>Creates an instance of LogMonitorAdapter using the specified LogLevels. 107 * The first LogLevel in the List is used as the default LogLevel unless 108 * changed using the setDefaultLevel method.<p> 109 * 110 * @param userDefinedLevels A list of user defined LogLevel objects. 111 * @return LogMonitorAdapter 112 */ 113 public static LogMonitorAdapter newInstance(List userDefinedLevels) { 114 return new LogMonitorAdapter(userDefinedLevels); 115 } 116 117 /** 118 * <p>Adds a LogRecord to the LogMonitor.<p> 119 * 120 * @param record The LogRecord object to be logged in the logging monitor. 121 */ 122 public void addMessage(LogRecord record) { 123 _logMonitor.addMessage(record); 124 } 125 126 /** 127 * <p>Set the maximum number of records to be displayed in the monitor<p> 128 * 129 * @param maxNumberOfRecords 130 */ 131 public void setMaxNumberOfRecords(int maxNumberOfRecords) { 132 _logMonitor.setMaxNumberOfLogRecords(maxNumberOfRecords); 133 } 134 135 /** 136 * <p>Set the default log level to be used when logging messages without 137 * specifying a LogLevel.<p> 138 * 139 * @param level 140 */ 141 public void setDefaultLevel(LogLevel level) { 142 _defaultLevel = level; 143 } 144 145 /** 146 * <p>Gets the default LogLevel for the Adapter.<p> 147 * 148 * @return LogLevel 149 */ 150 public LogLevel getDefaultLevel() { 151 return _defaultLevel; 152 } 153 154 /** 155 * <p>Sets the Severe LogLevel.</p> 156 * 157 * @param level 158 */ 159 public void setSevereLevel(LogLevel level) { 160 AdapterLogRecord.setSevereLevel(level); 161 } 162 163 /** 164 * <p>Gets the current Severe LogLevel <p> 165 * 166 * @return LogLevel 167 */ 168 public LogLevel getSevereLevel() { 169 return AdapterLogRecord.getSevereLevel(); 170 } 171 172 /** 173 * <p>Log a complete message to the Monitor.<p> 174 * 175 * @param category The category to be used 176 * @param level The log level to apply to the message 177 * @param message The message 178 * @param t The throwable content of the message 179 * @param NDC The NDC really only applies to Log4J and the parameter can 180 * usually be ignored. 181 */ 182 public void log(String category, LogLevel level, String message, 183 Throwable t, String NDC) { 184 AdapterLogRecord record = new AdapterLogRecord(); 185 record.setCategory(category); 186 record.setMessage(message); 187 record.setNDC(NDC); 188 record.setThrown(t); 189 190 if (level == null) { 191 record.setLevel(getDefaultLevel()); 192 } else { 193 record.setLevel(level); 194 } 195 196 addMessage(record); 197 } 198 199 /** 200 * <p>Log a message to the Monitor and use the default LogLevel.<p> 201 * 202 * @param category The category to be used 203 * @param message The message 204 */ 205 public void log(String category, String message) { 206 log(category, null, message); 207 } 208 209 /** 210 * <p>Log a message to the Monitor.<p> 211 * 212 * @param category The category to be used 213 * @param level The log level to apply to the message 214 * @param message The message 215 * @param NDC 216 */ 217 public void log(String category, LogLevel level, String message, String NDC) { 218 log(category, level, message, null, NDC); 219 } 220 221 /** 222 * <p>Log a message to the Monitor.<p> 223 * 224 * @param category The category to be used 225 * @param level The log level to apply to the message 226 * @param message The message 227 * @param t The throwable content of the message 228 */ 229 public void log(String category, LogLevel level, String message, 230 Throwable t) { 231 log(category, level, message, t, null); 232 } 233 234 /** 235 * <p>Log a message to the Monitor.<p> 236 * 237 * @param category The category to be used 238 * @param level The log level to apply to the message 239 * @param message The message 240 */ 241 public void log(String category, LogLevel level, String message) { 242 log(category, level, message, null, null); 243 } 244 245 //-------------------------------------------------------------------------- 246 // Protected Methods: 247 //-------------------------------------------------------------------------- 248 /** 249 * @return the screen width from Toolkit.getScreenSize() 250 * if possible, otherwise returns 800 251 * @see java.awt.Toolkit 252 */ 253 protected static int getScreenWidth() { 254 try { 255 return Toolkit.getDefaultToolkit().getScreenSize().width; 256 } catch (Throwable t) { 257 return 800; 258 } 259 } 260 261 /** 262 * @return the screen height from Toolkit.getScreenSize() 263 * if possible, otherwise returns 600 264 * @see java.awt.Toolkit 265 */ 266 protected static int getScreenHeight() { 267 try { 268 return Toolkit.getDefaultToolkit().getScreenSize().height; 269 } catch (Throwable t) { 270 return 600; 271 } 272 } 273 274 protected static int getDefaultMonitorWidth() { 275 return (3 * getScreenWidth()) / 4; 276 } 277 278 protected static int getDefaultMonitorHeight() { 279 return (3 * getScreenHeight()) / 4; 280 } 281 //-------------------------------------------------------------------------- 282 // Private Methods: 283 //-------------------------------------------------------------------------- 284 285 //-------------------------------------------------------------------------- 286 // Nested Top-Level Classes or Interfaces 287 //-------------------------------------------------------------------------- 288 } 289