> 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. 

> 
> 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 ExtendedLoggers.
>>>>>>> 
>>>>>>> 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
>>>>>>>>>>>>> JUnit in Action, Second Edition
>>>>>>>>>>>>> Spring Batch in Action
>>>>>>>>>>>>> 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
>>>>>>>>>>> JUnit in Action, Second Edition
>>>>>>>>>>> Spring Batch in Action
>>>>>>>>>>> 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
>>>>>>>> JUnit in Action, Second Edition
>>>>>>>> Spring Batch in Action
>>>>>>>> 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
>>>>>>> JUnit in Action, Second Edition
>>>>>>> Spring Batch in Action
>>>>>>> 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
>>>>> JUnit in Action, Second Edition
>>>>> Spring Batch in Action
>>>>> 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
>>> JUnit in Action, Second Edition
>>> Spring Batch in Action
>>> 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
> JUnit in Action, Second Edition
> Spring Batch in Action
> Blog: http://garygregory.wordpress.com 
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory

Reply via email to