We handle recursion.

Ralph

On Sep 2, 2014, at 9:22 PM, Matt Sicker <[email protected]> wrote:

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

Reply via email to