1 package com.protomatter.syslog; 2 3 52 53 import java.util.*; 54 import java.text.MessageFormat ; 55 import org.apache.oro.text.regex.*; 56 57 88 public class PerClassPolicy 89 extends SimpleLogPolicy 90 { 91 private List groupList = new ArrayList(); 92 private static Perl5Compiler patternCompiler = new Perl5Compiler(); 93 94 97 public PerClassPolicy() 98 { 99 super(); 100 } 101 102 105 public List getGroupList() 106 { 107 return this.groupList; 108 } 109 112 public void setGroupList(List list) 113 { 114 this.groupList = list; 115 } 116 117 130 public boolean shouldLog(SyslogMessage message) 131 { 132 if (message.loggerClassname != null) 134 { 135 int size = groupList.size(); 136 PolicyGroup group = null; 137 for (int i=0; i<size; i++) 138 { 139 group = (PolicyGroup)groupList.get(i); 140 if (group.shouldLog(message)) 141 return true; 142 } 143 } 144 145 return super.shouldLog(message); 148 } 149 150 153 public Iterator getPolicyGroups() 154 { 155 return this.groupList.iterator(); 156 } 157 158 161 public void addPolicyGroup(PolicyGroup group) 162 { 163 this.groupList.add(group); 164 } 165 166 169 public void removePolicyGroup(PolicyGroup group) 170 { 171 this.groupList.remove(group); 172 } 173 174 182 public static class PolicyGroup 183 extends SimpleLogPolicy 184 { 185 private Set patternSet = new HashSet(); 186 private Set classNameSet = new HashSet(); 187 private Pattern pattern = null; 188 private Object lock = new Object (); 189 private Perl5Matcher patternMatcher = new Perl5Matcher(); 190 191 194 public PolicyGroup() 195 { 196 super(); 197 } 198 199 202 public Iterator getClassSet() 203 { 204 return this.classNameSet.iterator(); 205 } 206 207 211 public void clearClassSet() 212 { 213 this.classNameSet = new HashSet(); 214 } 215 216 220 public void addClass(String classname) 221 { 222 this.classNameSet.add(classname); 223 } 224 225 229 public void removeClass(String classname) 230 { 231 this.classNameSet.remove(classname); 232 } 233 234 237 public Iterator getPatternSet() 238 { 239 return this.patternSet.iterator(); 240 } 241 242 246 public void clearPatternSet() 247 { 248 this.patternSet = new HashSet(); 249 this.pattern = null; 250 } 251 252 256 public void addClassPattern(String classname) 257 { 258 this.patternSet.add(classname); 259 generatePattern(); 260 } 261 262 266 public void removeClassPattern(String classname) 267 { 268 this.patternSet.remove(classname); 269 generatePattern(); 270 } 271 272 276 private void generatePattern() 277 throws IllegalArgumentException 278 { 279 StringBuffer thePattern = new StringBuffer (); 280 try 281 { 282 Iterator patterns = getPatternSet(); 283 while (patterns.hasNext()) 284 { 285 thePattern.append(patterns.next()); 286 if (patterns.hasNext()) 287 thePattern.append("|"); 288 } 289 pattern = patternCompiler.compile(thePattern.toString()); 290 } 291 catch (MalformedPatternException x) 292 { 293 throw new IllegalArgumentException ( 294 MessageFormat.format(Syslog.getResources().getString(MessageConstants.INVALID_PATTERN_MESSAGE), 295 new Object [] { thePattern })); 296 } 297 } 298 299 306 public boolean shouldLog(SyslogMessage m) 307 { 308 if (super.shouldLog(m)) 310 { 311 if (classNameSet.contains(m.loggerClassname)) 313 { 314 return true; 315 } 316 else if (pattern != null) { 318 synchronized (lock) 319 { 320 if (patternMatcher.contains(m.loggerClassname, pattern)) 321 { 322 return true; 323 } 324 } 325 } 326 } 327 328 return false; 330 } 331 } 332 } 333 | Popular Tags |