1 package org.apache.velocity.runtime.log; 2 3 /* 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 22 import java.util.Vector; 23 import java.util.Iterator; 24 import org.apache.velocity.runtime.RuntimeServices; 25 26 /** 27 * Pre-init logger. I believe that this was suggested by 28 * Carsten Ziegeler <cziegeler@sundn.de> and 29 * Jeroen C. van Gelderen. If this isn't correct, let me 30 * know as this was a good idea... 31 * 32 * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a> 33 * @author <a href="mailto:nbubna@apache.org">Nathan Bubna</a> 34 * @version $Id: HoldingLogChute.java 463298 2006-10-12 16:10:32Z henning $ 35 */ 36 class HoldingLogChute implements LogChute 37 { 38 private Vector pendingMessages = new Vector(); 39 40 /** 41 * @see org.apache.velocity.runtime.log.LogChute#init(org.apache.velocity.runtime.RuntimeServices) 42 */ 43 public void init(RuntimeServices rs) throws Exception 44 { 45 } 46 47 /** 48 * Logs messages. All we do is store them until 'later'. 49 * 50 * @param level severity level 51 * @param message complete error message 52 */ 53 public void log(int level, String message) 54 { 55 synchronized(this) 56 { 57 Object[] data = new Object[2]; 58 // TODO: JDK 1.4+ -> valueOf() 59 data[0] = new Integer(level); 60 data[1] = message; 61 pendingMessages.addElement(data); 62 } 63 } 64 65 /** 66 * Logs messages and errors. All we do is store them until 'later'. 67 * 68 * @param level severity level 69 * @param message complete error message 70 * @param t the accompanying java.lang.Throwable 71 */ 72 public void log(int level, String message, Throwable t) 73 { 74 synchronized(this) 75 { 76 Object[] data = new Object[3]; 77 // TODO: JDK 1.4+ -> valueOf() 78 data[0] = new Integer(level); 79 data[1] = message; 80 data[2] = t; 81 pendingMessages.addElement(data); 82 } 83 } 84 85 /** 86 * @see org.apache.velocity.runtime.log.LogChute#isLevelEnabled(int) 87 */ 88 public boolean isLevelEnabled(int level) 89 { 90 return true; 91 } 92 93 /** 94 * Dumps the log messages this chute is holding into a new chute 95 * @param newChute 96 */ 97 public void transferTo(LogChute newChute) 98 { 99 synchronized(this) 100 { 101 if (!pendingMessages.isEmpty()) 102 { 103 // iterate and log each individual message... 104 for(Iterator i = pendingMessages.iterator(); i.hasNext();) 105 { 106 Object[] data = (Object[])i.next(); 107 int level = ((Integer)data[0]).intValue(); 108 String message = (String)data[1]; 109 if (data.length == 2) 110 { 111 newChute.log(level, message); 112 } 113 else 114 { 115 newChute.log(level, message, (Throwable)data[2]); 116 } 117 } 118 } 119 } 120 } 121 122 }