On Tue, Oct 9, 2012 at 10:19 AM, Ralph Goers <[email protected]>wrote:
> This requires a long answer.
>
> Ceki realized in Logback that OutputStreams really needed a byte array.
> So he changed Appenders to require an Encoder instead of an Appender.
> Layouts still return a String so he created a wrapper Encoder to convert
> the String to a byte array.
>
> The idea of using a byte array is correct - most of the time, as most of
> the Appenders use an OutputStream. However, the JMS appenders don't. They
> require a Serializable object.
>
> When developing Log4j I did not like having both Encoders and Layouts, so
> I chose to have Layouts return a byte array. But then it made no sense to
> have something based on the AbstractStringLayout convert the String to a
> byte array only to have to convert it back to a String again for the JMS
> Appenders, which is why I added formatAs(). Now the JMS Appender can send
> both a Serialized LogEvent and a String.
>
> So in looking at how formatAs() is used I would think that we could just
> change Layout to
>
> public interface Layout {
>
> Serializable formatAs();
>
> ...
> }
>
> OK, so we loose some type info, but that seems OK.
While we are here, I think the format methods need better name especially
since there are two and formatAs(LogEvent) is not great, I keep on thinking
"format as... what?" A log event? No, that's what I pass in. What about
using the to* convention here?
- byte[] toByteArray(LogEvent);
- Serializable toSerializable(LogEvent);
?
Gary
>
> On Oct 9, 2012, at 6:23 AM, Gary Gregory wrote:
>
> Hi All:
>
> We currently have a generics warning for:
>
> org.apache.logging.log4j.core.Appender.getLayout()
>
> because the method is defined as:
>
> Layout getLayout();
>
> and Layout<T extends Serializable>
>
> Which hints at defining getLayout() as:
>
> Layout<T> getLayout();
>
> Which means either:
>
> <T extends Serializable> Layout<T> getLayout();
>
> or:
>
> public interface Appender<T extends Serializable> extends Lifecycle {
> ...
> Layout<T> getLayout();
>
> Now I also see:
>
> @issue LOG4J2-36 Refactor into Channel
>
> But the issue has been closed with no changes planned.
>
> So... thoughts?
>
> Gary
>
>
>
>
> --
> E-Mail: [email protected] | [email protected]
> JUnit in Action, 2nd Ed: <http://goog_1249600977/>http://bit.ly/ECvg0
> Spring Batch in Action: <http://s.apache.org/HOq>http://bit.ly/bqpbCK
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
>
>
>
--
E-Mail: [email protected] | [email protected]
JUnit in Action, 2nd Ed: <http://goog_1249600977>http://bit.ly/ECvg0
Spring Batch in Action: <http://s.apache.org/HOq>http://bit.ly/bqpbCK
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory