1   package org.apache.velocity.test.misc;
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 org.apache.velocity.runtime.RuntimeServices;
23  import org.apache.velocity.runtime.log.LogChute;
24  
25  /**
26   * LogChute implementation that creates a String in memory.  Used to test
27   * log information.
28   *
29   * @author <a href="mailto:wglass@forio.com">Will Glass-Husain</a>
30   * @version $Id: TestLogChute.java 490718 2006-12-28 13:35:49Z wglass $
31   */
32  public class TestLogChute implements LogChute
33  {
34      public static final String TEST_LOGGER_LEVEL = "runtime.log.logsystem.test.level";
35  
36      private StringBuffer log = new StringBuffer();
37  
38      private int logLevel;
39      
40      public void init(RuntimeServices rs) throws Exception
41      {
42          String level = rs.getString(TEST_LOGGER_LEVEL, "debug");
43          logLevel = getLevelNumber(level, LogChute.DEBUG_ID);
44      }
45  
46      public void log(int level, String message)
47      {
48          if (level >= logLevel)
49          {
50              String levelName;
51              levelName = getLevelName(level);
52              log.append(" [").append(levelName).append("] ");
53              log.append(message);
54              log.append("\n");
55          }
56      }
57      
58      /**
59       * Return the stored log messages to date.
60       * @return log messages
61       */
62      public String getLog()
63      {
64          return log.toString();
65      }
66  
67      /**
68       * Return the name corresponding to each level
69       * @param level integer level
70       * @return String level name
71       */
72      private String getLevelName(int level)
73      {
74          String levelName;
75          if (level == LogChute.DEBUG_ID)
76          {
77              levelName = "debug";
78          }
79          else if (level == LogChute.INFO_ID)
80          {
81              levelName = "info";
82          }
83          else if (level == LogChute.TRACE_ID)
84          {
85              levelName = "trace";
86          }
87          else if (level == LogChute.WARN_ID)
88          {
89              levelName = "warn";
90          }
91          else if (level == LogChute.ERROR_ID)
92          {
93              levelName = "error";
94          }
95          else 
96          {
97              levelName = "";
98          }
99  
100         return levelName;
101     }
102 
103     /**
104      * Return the integer level correspoding to the string number, or use the default
105      * @param level name
106      * @param defaultLevel the default if the name does not exist
107      * @return integer level
108      */
109     private int getLevelNumber(String level, int defaultLevel)
110     {
111         if (level == null)
112         {
113             return defaultLevel;
114         }
115         else if (level.equalsIgnoreCase("DEBUG"))
116         {
117             return LogChute.DEBUG_ID;
118         }
119         else if (level.equalsIgnoreCase("ERROR"))
120         {
121             return LogChute.ERROR_ID;
122         }
123         else if (level.equalsIgnoreCase("INFO"))
124         {
125             return LogChute.INFO_ID;
126         }
127         else if (level.equalsIgnoreCase("TRACE"))
128         {
129             return LogChute.TRACE_ID;
130         }
131         else if (level.equalsIgnoreCase("WARN"))
132         {
133             return LogChute.WARN_ID;
134         }
135         else 
136         {
137             return defaultLevel;
138         }
139     }
140     
141     public void log(int level, String message, Throwable t)
142     {
143         if (level >= logLevel)
144         {
145             String levelName;
146             levelName = getLevelName(level);
147             log.append(" [").append(levelName).append("] ");
148             log.append(message);
149             log.append("\n");
150             log.append(t.toString());
151             log.append("\n");
152         }
153     }
154 
155     public boolean isLevelEnabled(int level)
156     {
157         return level >= logLevel;
158     }
159 
160 }