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