All, On 11/16/16 5:33 PM, Christopher Schultz wrote: > Scott, > > On 11/16/16 2:09 PM, Scott Harrington wrote: >>>> On 11/16/16 9:49 AM, Ralph Goers wrote: >>>>> First, I have to say that Log4j 1 reached end-of-life over a year >>>>> ago. We recommend you upgrade to Log4j 2. >>>> >>>> Fair enough. I'm not quite there, yet. I suspect that log4j 2 will have >>>> the same issue, though. >>> >>> I don’t know how to configure a TriggeringEventEvaluator in Log4j 1 >>> but I’d bet google does ;-) >> >> Chris: I have a ThrottledSMTPApppender subclass that I used for years >> under Log4j 1.x, it's very small but was somewhat tricky; it starts a >> "flusher" thread and attaches a shutdown hook to drain before exit. >> There is a TriggeringEventEvaluator that always returns false. There is >> a configureable "initialDelay" (default 10 seconds) and >> "messageInterval" (default 60 seconds). > > That sounds cool, but maybe overkill if I can get the > TriggeringEventEvaluator working with the stock log4j distro. > > (It looks like I'll need to write my own NeverTriggerEventEvaluator to > do that. It looks trivial so I'll try that first.)
So, I implemented an event trigger class in my driver class like this:
package com.my;
public class Driver
{
[...]
public static class NeverTriggeringEventEvaluator
implements TriggeringEventEvaluator
{
@Override
public boolean isTriggeringEvent(LoggingEvent arg0) {
return false;
}
}
}
I enabled it in my configuration file like this:
log4j.appender.CLIENT.evaluatorClass=com.my.Driver.NeverTriggeringEventEvaluator
When log4j initializes itself it emits this error on stdout:
log4j:ERROR Could not instantiate class
[com.my.Driver.NeverTriggeringEventEvaluator].
java.lang.ClassNotFoundException:
com.chadis.unity.CHADISProUnityBridge.NeverTriggeringEventEvaluator
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[...]
I'm not using any special ClassLoader acrobatics or anything like that.
I copy/pasted the name of the fully-qualified class name from Eclipse so
it's not a typo.
If I run "javap" with that class name and the effective CLASSPATH of the
process when it runs, I get this output:
$ javap -classpath build/classes com.my.Driver.NeverTriggeringEventEvaluator
Compiled from "Driver.java"
public class com.my.Driver$NeverTriggeringEventEvaluator implements
org.apache.log4j.spi.TriggeringEventEvaluator {
public com.my.Driver$NeverTriggeringEventEvaluator();
public boolean isTriggeringEvent(org.apache.log4j.spi.LoggingEvent);
}
Any ideas?
Do I need to use com.my.Driver$NeverTriggeringEventEvaluator instead?
(Obviously, I'm trying that without waiting for an answer.)
-chris
signature.asc
Description: OpenPGP digital signature
