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
                                          

Reply via email to