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