Custom log levels weren’t added to Log4j 2 until version 2.1, so if the version 
you are using is older than that it is no surprise that it isn’t working.

Ralph

> On Aug 26, 2015, at 2:34 PM, Nicholas Duane <nic...@msn.com> wrote:
> 
> While I work on figuring out how to get a newer version of log4j2 installed 
> I'm wondering whether there is some additional investigation I can do with 
> the version I have.  For instance, I was hoping with the level of logging I 
> have enabled, that log4j would be indicating some issue it had with the 
> custom level.  However, I don't see such an issue.  The only thing I see is 
> an issue with the custom level, which I'm guessing is when I'm using it in 
> the filter.  I've attached the warning in the log below.
> 
> Is there some additional logging I can turn on such that log4j will produce 
> more info which might indicate why my custom levels aren't working?  Here is 
> my current log4j2 configuration.
> 
> log4j2.xml:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <Configuration status="trace" verbose="true">
>  <CustomLevels>
>    <CustomLevel name="INFOM1" intLevel="399"/>
>    <CustomLevel name="INFOP1" intLevel="401"/>
>  </CustomLevels>
>  <Appenders>
>    <File name="info" fileName="info.log">
>      <PatternLayout>
>    <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
>      </PatternLayout>
>      <Filters>
>    <ThresholdFilter level="INFOM1" onMatch="DENY" onMismatch="NEUTRAL"/>
>    <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
>      </Filters>
>    </File>
>  </Appenders>
>  <Loggers>
>    <Logger name="HelloWorld" level="ALL">
>      <AppenderRef ref="info"/>
>    </Logger>
>    <Root>
>    </Root>
>  </Loggers>
> </Configuration>
> 
> snippet of console output:
> 
> 2015-08-26 14:26:21,070 WARN Error while converting string [INFOM1] to type 
> [class org.apache.logging.log4j.Level]. Using default value [null]. 
> java.lang.IllegalArgumentException: Unknown level constant [INFOM1].
>    at org.apache.logging.log4j.Level.valueOf(Level.java:281)
>    at 
> org.apache.logging.log4j.core.config.plugins.util.TypeConverters$LevelConverter.convert(TypeConverters.java:240)
>    at 
> org.apache.logging.log4j.core.config.plugins.util.TypeConverters$LevelConverter.convert(TypeConverters.java:237)
>    at 
> org.apache.logging.log4j.core.config.plugins.util.TypeConverters.convert(TypeConverters.java:343)
>    at 
> org.apache.logging.log4j.core.config.plugins.visitors.AbstractPluginVisitor.convert(AbstractPluginVisitor.java:130)
>    at 
> org.apache.logging.log4j.core.config.plugins.visitors.PluginAttributeVisitor.visit(PluginAttributeVisitor.java:44)
>    at 
> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.generateParameters(PluginBuilder.java:233)
>    at 
> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:131)
>    at 
> org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:748)
>    at 
> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:683)
>    at 
> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:675)
>    at 
> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:675)
>    at 
> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:675)
>    at 
> org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:349)
>    at 
> org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:150)
>    at 
> org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:358)
>    at 
> org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:416)
>    at 
> org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:146)
>    at 
> org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:75)
>    at 
> org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:37)
>    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:473)
>    at HelloWorld.<clinit>(HelloWorld.java:7)
> 
> Thanks,
> Nick
> 
>> Date: Wed, 26 Aug 2015 12:36:40 -0700
>> Subject: Re: custom levels via configuration
>> From: garydgreg...@gmail.com
>> To: log4j-user@logging.apache.org
>> 
>> We've never released a version "2.0-1.fc21" so it must be a Fedora build,
>> presumably based on 2.0 or some fork of it.
>> 
>> You need to test with version 2.3 or a 2.4-SNAPSHOT. I'll leave you to
>> Google how to install 2.3 on Fedora ;-)
>> 
>> Gary
>> 
>> On Wed, Aug 26, 2015 at 12:14 PM, Nicholas Duane <nic...@msn.com> wrote:
>> 
>>> First off let me admit that I'm a noob at both Linux and java, and log4j
>>> for that matter.
>>> 
>>> I don't know how to package anything so my class that you see is a simple
>>> java class which I compiled using javac.  I then run it using 'java
>>> HelloWorld'.  I'm running fedora 21.  When I do a 'yum list log4j' it says
>>> I have 2.0-1.fc21.
>>> 
>>> Thanks,
>>> Nick
>>> 
>>>> Date: Wed, 26 Aug 2015 11:46:51 -0700
>>>> Subject: Re: custom levels via configuration
>>>> From: garydgreg...@gmail.com
>>>> To: log4j-user@logging.apache.org
>>>> 
>>>> This:
>>>> 
>>>> <Logger name="HelloWorld" level="ALL">
>>>> 
>>>> is only going to match:
>>>> 
>>>> static Logger log = LogManager.getLogger(HelloWorld.class.getName());
>>>> 
>>>> if the class in unpackaged, which it looks it is based on this paste but
>>> I
>>>> want to double check that you did not omit anything from the example.
>>>> 
>>>> Are you using the latest version (2.3)?.
>>>> 
>>>> I just added this test the other day to Git master:
>>>> 
>>>> org.apache.logging.log4j.core.CustomLevelsTest
>>>> 
>>>> And it shows that we can configure custom levels from a file and see them
>>>> in code.
>>>> 
>>>> So I am puzzled here.
>>>> 
>>>> You could try the latest from Git master as well but I do not recall any
>>>> fixes in this area.
>>>> 
>>>> I wonder if the Appenders are processed by the configuration _before_ the
>>>> custom levels...
>>>> 
>>>> Gary
>>>> 
>>>> 
>>>> On Wed, Aug 26, 2015 at 11:19 AM, Nicholas Duane <nic...@msn.com> wrote:
>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> On to my next problem.  I'm trying to define a custom level in
>>>>> configuration.  Not sure if it's working or not.  However, when I
>>> attempt
>>>>> to get the level for that custom level I get back null, which I wasn't
>>>>> expecting.  Here is the log4j2.xml config file:
>>>>> 
>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>> <Configuration status="trace" verbose="true">
>>>>>  <CustomLevels>
>>>>>    <CustomLevel name="INFOM1" intLevel="399"/>
>>>>>    <CustomLevel name="INFOP1" intLevel="401"/>
>>>>>  </CustomLevels>
>>>>>  <Appenders>
>>>>>    <File name="info" fileName="info.log">
>>>>>      <PatternLayout>
>>>>>    <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
>>>>>      </PatternLayout>
>>>>>      <Filters>
>>>>>    <ThresholdFilter level="INFOM1" onMatch="DENY"
>>> onMismatch="NEUTRAL"/>
>>>>>    <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
>>>>>      </Filters>
>>>>>    </File>
>>>>>  </Appenders>
>>>>>  <Loggers>
>>>>>    <Logger name="HelloWorld" level="ALL">
>>>>>      <AppenderRef ref="info"/>
>>>>>    </Logger>
>>>>>    <Root>
>>>>>    </Root>
>>>>>  </Loggers>
>>>>> </Configuration>
>>>>> 
>>>>> Here is my code:
>>>>> 
>>>>> import org.apache.logging.log4j.LogManager;
>>>>> import org.apache.logging.log4j.Logger;
>>>>> import org.apache.logging.log4j.Level;
>>>>> 
>>>>> public class HelloWorld
>>>>> {
>>>>>    static Logger log =
>>> LogManager.getLogger(HelloWorld.class.getName());
>>>>> 
>>>>>    public static void main(String[] args)
>>>>>    {
>>>>>      System.out.println("Hello, World");
>>>>>      log.info("hello this is an INFO  message");
>>>>>      log.warn("hello this is a WARN message");
>>>>>      log.debug("hello this is a DEBUG message");
>>>>>      Level level = Level.getLevel("INFOM1");
>>>>>      if (level == null)
>>>>>    System.out.println("Didn't find level INFOM1");
>>>>>      else
>>>>>        log.log(level, "hello this is an INFOM1 message");
>>>>>      level = Level.getLevel("INFOP1");
>>>>>      if (level == null)
>>>>>    System.out.println("Didn't find level INFOP1");
>>>>>      else
>>>>>        log.log(level, "hello this is an INFOP1 message");
>>>>>    }
>>>>> }
>>>>> 
>>>>> Any ideas?  I obviously don't want to use Level.forName() as that will
>>>>> create the level if it doesn't exist and I want to ensure I'm pulling
>>> the
>>>>> value from the configuration.
>>>>> 
>>>>> Thanks,
>>>>> Nick
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
>>>> Java Persistence with Hibernate, Second Edition
>>>> <http://www.manning.com/bauer3/>
>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>> Blog: http://garygregory.wordpress.com
>>>> Home: http://garygregory.com/
>>>> Tweet! http://twitter.com/GaryGregory
>>> 
>>> 
>> 
>> 
>> 
>> -- 
>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
>> Java Persistence with Hibernate, Second Edition
>> <http://www.manning.com/bauer3/>
>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>> Spring Batch in Action <http://www.manning.com/templier/>
>> Blog: http://garygregory.wordpress.com
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>                                         



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-user-h...@logging.apache.org

Reply via email to