Sent from my iPad
On Oct 10, 2012, at 4:04 AM, Gary Gregory <[email protected]> wrote: > On Wed, Oct 10, 2012 at 2:19 AM, Ralph Goers <[email protected]> > wrote: >> >> On Oct 9, 2012, at 5:28 PM, Gary Gregory wrote: >> >>> 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); >> >> Yes - I like those names better. > > I see you changed formatAs(LogEvent) to toSerialized(LogEvent) but I do not > feel this is correct because the object has not been serialized, it has > merely been converted into an object that can be serialized, hence my > proposal for toSerializable(LogEvent), because the method returns a > Serializable. > Rats. I meant to use the name you proposed. Ralph
