I should add that the LoggerConfig and Configuration was one of the first things I worked on when I started working on 2.0. Things have changed since then so it might possible to add a new LoggerConfig to an existing configuration. I'd have to review it and remind myself of what the problems were.
Ralph On Jul 22, 2013, at 2:59 PM, Ralph Goers wrote: > Well, you can actually do that. It is just not my number one recommendation > :-) I'm pretty sure I have answered how to do that a few times. It just > needs to be documented. > > The actual code to do this is > > LoggerContext ctx = (LoggerContext) LogManager.getContext(false); > > Configuration config = ctx.getConfiguration(); > > LoggerConfig loggerConfig = config.getLoggerConfig(loggerName); > > loggerConfig.setLevel(level); > > ctx.updateLoggers(); > > Note that the LoggerConfig returned may not match loggerName - it might be a > parent. Also, adding a new LoggerConfig to an existing configuration is not > allowed as it cannot be done atomically. In that case you have to create a > new configuration. > > Ralph > > > On Jul 22, 2013, at 2:04 PM, Nicholas Williams wrote: > >> I can live with having to use the Core directly to change logger >> levels, as opposed to using the API. But your solution of cloning, >> changing, and replacing the configuration seems extremely heavy and >> excessive for merely changing the level for a single logger. There are >> a lot of other things that happen as a result that are completely >> unrelated to changing the level for a logger. >> >> Note that org.apache.log4j.Logger from Log4j 1 includes a setLevel >> method. While I understand that Log4j 1 isn't a separated >> API/implementation like Log4j 2, users are used to being able to >> easily change Logger levels, and you WILL (I'm confident) start seeing >> "Why is this so hard" questions when Log4j 1 sunsets and users start >> migrating en masse. >> >> On Mon, Jul 22, 2013 at 3:48 PM, Ralph Goers <ralph.go...@dslextreme.com> >> wrote: >>> I guess I have to disagree. With Logback it is more explicit since SLF4J is >>> its API. The more of this stuff that gets added to the API the more >>> difficult it is going to be to keep the API separate from the >>> implementation. My view is that the API is primarily for applications that >>> want to use Log4j to generate Log events. Doing things to customize how >>> Appenders, Loggers, Filters, etc work is very much tied to the >>> implementation. Note that none of those are exposed in the API today and >>> you would have to to do what you are proposing. >>> >>> Ralph >>> >>> On Jul 22, 2013, at 12:56 PM, Gary Gregory wrote: >>> >>>> This seems like an "obvious" feature and should be part of the public >>>> API/feature set (IMO). >>>> >>>> Gary >>>> >>>> >>>> On Mon, Jul 22, 2013 at 3:08 PM, Nick Williams < >>>> nicho...@nicholaswilliams.net> wrote: >>>> >>>>> We do the _exact same thing_ in our apps that use Log4j 1. Being able to >>>>> do this is crucial to us. Being able to do this using the API is ideal and >>>>> obviously preferred so that the Core can be a runtime dependency, but as >>>>> long as we can do it one way or another we're ok. >>>>> >>>>> Nick >>>>> >>>>> On Jul 22, 2013, at 2:05 PM, Gary Gregory wrote: >>>>> >>>>>> Here is a user story I have at work all the time, which I'd like to be >>>>> able >>>>>> to do in Log4J 2 when we eventually migrate to it. >>>>>> >>>>>> Our server starts. A couple of days later, something goes wrong. Our user >>>>>> contacts us and we tell them to use our admin console to enable debugging >>>>>> for X and Y. This causes the log levels for certain loggers to be set to >>>>>> DEBUG, which spits out lots of details. The user then sends us the log >>>>> file >>>>>> and resets the system to normal. Under the covers the loggers go back to >>>>>> INFO or WARN. >>>>>> >>>>>> Our console sends a request to the server, which in turns uses the log4j >>>>> 1 >>>>>> API to change the log level. >>>>>> >>>>>> How would I do that in v2? >>>>>> >>>>>> Gary >>>>>> >>>>>> >>>>>> On Mon, Jul 22, 2013 at 1:55 PM, Ralph Goers <ralph.go...@dslextreme.com >>>>>> wrote: >>>>>> >>>>>>> Can you explain what it is you are really trying to do? Rather than >>>>> just >>>>>>> answer specific questions I am wondering if there isn't a better way to >>>>> do >>>>>>> what you want. >>>>>>> >>>>>>> Ralph >>>>>>> >>>>>>> >>>>>>> On Jul 22, 2013, at 7:14 AM, SMITH, CURTIS wrote: >>>>>>> >>>>>>>> From a thread back in May: >>>>>>>> >>>>>>>> My question to the below snips of the thread are; >>>>>>>> >>>>>>>> My app has many Catagories (using 1.x terminology). To setLevel in 1.x >>>>>>> I had to getCurrentCatagories() and iterate over the list setting level. >>>>>>>> >>>>>>>> In 2.x, does the code below set all Appenders regardless of what Level >>>>>>> they were set to in log4j.xml? >>>>>>>> >>>>>>>> loggerConfig.setLevel(Level.DEBUG); >>>>>>>> ctx.updateLoggers(); >>>>>>>> >>>>>>>> The next question is how to set the level of just one Appender >>>>>>> (Logger??) ? Is there a way to get the list / iterator of >>>>>>> Appenders(Logger?) like you could get a a list of Catagories in 1.x? >>>>>>>> >>>>>>>> It appears that LogManager.getLogger("foo") you need to know the logger >>>>>>> names at coding time. >>>>>>>> >>>>>>>> >>>>>>>> Thanks, curt >>>>>>>> >>>>>>>> ======= >>>>>>>> >>>>>>>> Ralph Goers said: >>>>>>>>>> No, the X Logger does not inherit its level from the root Logger. It >>>>>>> inherits its level from >>>>>>>> the root LoggerConfig. See the picture at >>>>>>> http://logging.apache.org/log4j/2.x/manual/architecture.html. >>>>>>>> >>>>>>>> The level you are modifying is brought into each Logger so that the >>>>>>> level can be tested very >>>>>>>> quickly. That is why the note on the setLevel method says it is >>>>>>> there primarily for unit >>>>>>>> testing. >>>>>>>> >>>>>>>> To do what you are attempting below you would need to do: >>>>>>>> >>>>>>>> LoggerContext ctx = (LoggerContext) LogManager.getContext(false); >>>>>>>> Configuration config = ctx.getConfiguration(); >>>>>>>> LoggerConfig loggerConfig = config.getRootLogger(); >>>>>>>> /* You could also specify the actual logger name as below and it >>>>>>> will return the LoggerConfig >>>>>>>> used by the Logger. >>>>>>>> LoggerConfig loggerConfig = getLoggerConfig("X"); >>>>>>>> */ >>>>>>>> loggerConfig.setLevel(Level.DEBUG); >>>>>>>> ctx.updateLoggers(); // This causes all Loggers to refetch >>>>>>> information from their LoggerConfig. >>>>>>>> >>>>>>>> Ralph >>>>>>>> >>>>>>>> Eric Scheie said: >>>>>>>>>> This >>>>>>>> is the actual code I used. >>>>>>>> >>>>>>>> LoggerContext ctx = (LoggerContext) LogManager.getContext(false); >>>>>>>> >>>>>>>> Configuration config = ctx.getConfiguration(); >>>>>>>> >>>>>>>> LoggerConfig loggerConfig = config.getLoggerConfig(LogManager. >>>>>>>> ROOT_LOGGER_NAME); >>>>>>>> >>>>>>>> loggerConfig.setLevel(level); >>>>>>>> >>>>>>>> ctx.updateLoggers(); >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> --------------------------------------------------------------------- >>>>>>>> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org >>>>>>>> For additional commands, e-mail: log4j-user-h...@logging.apache.org >>>>>>>> >>>>>>> >>>>>>> >>>>>>> --------------------------------------------------------------------- >>>>>>> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org >>>>>>> For additional commands, e-mail: log4j-user-h...@logging.apache.org >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> 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 >>>>> >>>>> >>>> >>>> >>>> -- >>>> 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 >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org >> For additional commands, e-mail: log4j-user-h...@logging.apache.org >> > --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-user-h...@logging.apache.org