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

Reply via email to