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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to