They'd have to use a different Appender than the JDBC one for that, though, or I think that may start some sort of logging feedback loop.
On 2 September 2014 23:12, Gary Gregory <[email protected]> wrote: > On Wed, Sep 3, 2014 at 12:04 AM, Remko Popma <[email protected]> > wrote: > >> >> On 2014/09/03, at 12:00, Gary Gregory <[email protected]> wrote: >> >> Yes, the config creates the loggers, but something has to tell Log4j to >> call DriverManager.setLogWriter(). >> >> >> I can see how it would be nice if this can be done in the log4j config, >> but since it's one line of code I think it's ok if the app does this. >> > > Hmm... not if you are starting a 3rd party app and all you have to edit is > a log4j XML/JSON/YAML config! > > Gary > >> >> >> Gary >> >> >> On Tue, Sep 2, 2014 at 10:55 PM, Matt Sicker <[email protected]> wrote: >> >>> Wouldn't the XML just configure the Logger itself? The streams are all >>> adapters. >>> >>> >>> On 2 September 2014 21:42, Gary Gregory <[email protected]> wrote: >>> >>>> On Tue, Sep 2, 2014 at 10:37 PM, Matt Sicker <[email protected]> wrote: >>>> >>>>> DriverManager.setLogWriter(LoggerStreams.forLogger(DriverManager.class).atLevel(Level.DEBUG)); >>>>> or something like that >>>>> >>>>> Then you'd just configure the "java.sql.DriverManager" logger. >>>>> >>>> >>>> Yes, but what in the XML config triggers this code? >>>> >>>> Gary >>>> >>>> >>>>> >>>>> >>>>> On 2 September 2014 21:30, Gary Gregory <[email protected]> >>>>> wrote: >>>>> >>>>>> Let's _also_ look at the JDBC use cases from a configuration POV. >>>>>> >>>>>> What should my XML config look like to say: >>>>>> >>>>>> (1) Redirect all JDBC logging to DEBUG (or any level). >>>>>> At the low level, that means: >>>>>> >>>>>> java.sql.DriverManager. >>>>>> setLogWriter(new LoggerPrintWriter((*ExtendedLogger*) >>>>>> LogManager.getLogger(), Level.DEBUG)); >>>>>> >>>>>> (2) Redirect JDBC logging for a given JDBC appender to DEBUG (or any >>>>>> level): >>>>>> java.sql.CommonDataSource.setLogWriter(new LoggerPrintWriter(( >>>>>> *ExtendedLogger*) LogManager.getLogger(), Level.DEBUG)); >>>>>> >>>>>> ? >>>>>> >>>>>> Gary >>>>>> >>>>>> >>>>>> On Tue, Sep 2, 2014 at 9:36 PM, Matt Sicker <[email protected]> wrote: >>>>>> >>>>>>> We could make a LogManager-style class that's only used for streams. >>>>>>> The LoggerStreams class looks like a good candidate, but due to the >>>>>>> lack of >>>>>>> javadocs anywhere, I'm not sure what anything does anymore! Well, >>>>>>> anything >>>>>>> that isn't an override of all the java.io methods. >>>>>>> >>>>>>> Is it required that all Log4j providers use ExtendedLogger instead >>>>>>> of just Logger? Because if it isn't, then that limits this a bit. If it >>>>>>> is >>>>>>> required, then that makes things easier. I would like a way to do >>>>>>> something >>>>>>> like: >>>>>>> >>>>>>> PrintWriter pw = >>>>>>> LoggerStreams.forLogger("com.foo.Bar").atLevel(Level.INFO).marked(FOO).buffered(4096).build(); >>>>>>> >>>>>>> (Names aren't final at all). A sort of fluent builder would be much >>>>>>> nicer than the dozens of constructors everywhere. I'm sure you know >>>>>>> what I >>>>>>> think about methods and constructors that take more than a few >>>>>>> parameters. >>>>>>> ;) >>>>>>> >>>>>>> >>>>>>> On 2 September 2014 19:46, Gary Gregory <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Matt and all: >>>>>>>> >>>>>>>> Please review *log4j-streams *in master. >>>>>>>> >>>>>>>> The current nasty is this the required type cast to >>>>>>>> *ExtendedLogger*: >>>>>>>> >>>>>>>> java.sql.DriverManager.setLogWriter(new LoggerPrintWriter(( >>>>>>>> *ExtendedLogger*) LogManager.getLogger(), Level.DEBUG)); >>>>>>>> >>>>>>>> Internally, *LogManager.getLogger()* uses an *ExtendedLogger* but >>>>>>>> upcasts it to a plain *Logger*, for no good technical reason (see >>>>>>>> below). >>>>>>>> >>>>>>>> Specifically: >>>>>>>> >>>>>>>> public static Logger getLogger(final String name) { >>>>>>>> final String actualName = name != null ? name : >>>>>>>> getClassName(2); >>>>>>>> return factory.getContext(LogManager.class.getName(), null, >>>>>>>> null, false).getLogger(actualName); >>>>>>>> } >>>>>>>> >>>>>>>> Where *getLogger() *is: >>>>>>>> >>>>>>>> org.apache.logging.log4j.spi.LoggerContext.getLogger(String) >>>>>>>> >>>>>>>> The only reason I've heard on the ML to upcast from >>>>>>>> *ExtendedLogger* to *Logger* is to hide the extra method from >>>>>>>> users. This now seems like jumping through hoops for not much effect. >>>>>>>> >>>>>>>> We cannot downcast the public API without breaking BC. >>>>>>>> >>>>>>>> I see the following options: >>>>>>>> >>>>>>>> - Do nothing and force call sites to downcast (good enough today). >>>>>>>> - Add *ExtendedLogger* version of methods to *LogManager*. >>>>>>>> - Create a parallel class to *LogManager *called *ExtendedLogManger >>>>>>>> *that only deals *ExtendedLogger*s >>>>>>>> >>>>>>>> *.* >>>>>>>> Thoughts? >>>>>>>> >>>>>>>> Gary >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Sep 2, 2014 at 8:11 PM, Gary Gregory < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> I'm almost done, I'll commit, please review... >>>>>>>>> >>>>>>>>> Gary >>>>>>>>> >>>>>>>>> >>>>>>>>> On Tue, Sep 2, 2014 at 7:53 PM, Matt Sicker <[email protected]> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Yeah I think I can take care of that tonight. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On 2 September 2014 14:41, Gary Gregory <[email protected]> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Matt, >>>>>>>>>>> >>>>>>>>>>> Do you have time for that today? >>>>>>>>>>> >>>>>>>>>>> Gary >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -------- Original message -------- >>>>>>>>>>> From: Matt Sicker >>>>>>>>>>> Date:09/02/2014 14:20 (GMT-05:00) >>>>>>>>>>> To: Log4J Developers List >>>>>>>>>>> Subject: Re: log4j-streams and ExtendedLoggers >>>>>>>>>>> >>>>>>>>>>> Yeah I think that'd be a good idea. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On 2 September 2014 09:49, Gary Gregory <[email protected]> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> So... should retype all of the methods that cast to >>>>>>>>>>>> ExtendedLogger and in turn their call sites? >>>>>>>>>>>> >>>>>>>>>>>> Gary >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Tue, Sep 2, 2014 at 10:22 AM, Matt Sicker <[email protected]> >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> This was written before all that was done. I had to rename it >>>>>>>>>>>>> from LoggerProvider to ExtendedLogger even! >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On 2 September 2014 09:21, Gary Gregory < >>>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Some of the streams API take a >>>>>>>>>>>>>> org.apache.logging.log4j.Logger and cast it to an >>>>>>>>>>>>>> org.apache.logging.log4j.spi.ExtendedLogger. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Why not just type to an ExtendedLoggers? >>>>>>>>>>>>>> >>>>>>>>>>>>>> Gary >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> E-Mail: [email protected] | [email protected] >>>>>>>>>>>>>> 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 >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> Matt Sicker <[email protected]> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> E-Mail: [email protected] | [email protected] >>>>>>>>>>>> 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 >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Matt Sicker <[email protected]> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Matt Sicker <[email protected]> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> E-Mail: [email protected] | [email protected] >>>>>>>>> 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: [email protected] | [email protected] >>>>>>>> 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 >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Matt Sicker <[email protected]> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> E-Mail: [email protected] | [email protected] >>>>>> 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 >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Matt Sicker <[email protected]> >>>>> >>>> >>>> >>>> >>>> -- >>>> E-Mail: [email protected] | [email protected] >>>> 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 >>>> >>> >>> >>> >>> -- >>> Matt Sicker <[email protected]> >>> >> >> >> >> -- >> E-Mail: [email protected] | [email protected] >> 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: [email protected] | [email protected] > 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 > -- Matt Sicker <[email protected]>
