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
