1 package org.apache.velocity.runtime.log;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.log4j.Category;
23 import org.apache.log4j.Level;
24 import org.apache.log4j.PatternLayout;
25 import org.apache.log4j.RollingFileAppender;
26 import org.apache.velocity.runtime.RuntimeConstants;
27 import org.apache.velocity.runtime.RuntimeServices;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public class SimpleLog4JLogSystem implements LogSystem
44 {
45 private RuntimeServices rsvc = null;
46 private RollingFileAppender appender = null;
47
48
49 protected Category logger = null;
50
51
52
53
54 public SimpleLog4JLogSystem()
55 {
56 }
57
58
59
60
61 public void init( RuntimeServices rs )
62 {
63 rsvc = rs;
64
65
66
67
68
69
70 String categoryname = (String) rsvc.getProperty("runtime.log.logsystem.log4j.category");
71
72 if ( categoryname != null )
73 {
74 logger = Category.getInstance( categoryname );
75
76 logVelocityMessage( 0,
77 "SimpleLog4JLogSystem using category '" + categoryname + "'");
78
79 return;
80 }
81
82
83
84
85
86 String logfile = rsvc.getString( RuntimeConstants.RUNTIME_LOG );
87
88
89
90
91 try
92 {
93 internalInit( logfile );
94
95 logVelocityMessage( 0,
96 "SimpleLog4JLogSystem initialized using logfile '" + logfile + "'" );
97 }
98 catch( Exception e )
99 {
100 System.err.println(
101 "PANIC : error configuring SimpleLog4JLogSystem : " + e );
102 }
103 }
104
105
106
107
108 private void internalInit( String logfile )
109 throws Exception
110 {
111
112
113
114
115
116 logger = Category.getInstance(this.getClass().getName());
117 logger.setAdditivity(false);
118
119
120
121
122
123 logger.setLevel(Level.DEBUG);
124
125 appender = new RollingFileAppender( new PatternLayout( "%d - %m%n"), logfile, true);
126
127 appender.setMaxBackupIndex( 1 );
128
129 appender.setMaximumFileSize( 100000 );
130
131 logger.addAppender(appender);
132 }
133
134
135
136
137
138
139
140 public void logVelocityMessage(int level, String message)
141 {
142 switch (level)
143 {
144 case LogSystem.WARN_ID:
145 logger.warn( message );
146 break;
147 case LogSystem.INFO_ID:
148 logger.info(message);
149 break;
150 case LogSystem.ERROR_ID:
151 logger.error(message);
152 break;
153 case LogSystem.DEBUG_ID:
154 default:
155 logger.debug(message);
156 break;
157 }
158 }
159
160
161
162
163
164 protected void finalize() throws Throwable
165 {
166 shutdown();
167 }
168
169
170 public void shutdown()
171 {
172 if (appender != null)
173 {
174 logger.removeAppender(appender);
175 appender.close();
176 appender = null;
177 }
178 }
179 }