Hi Matt, sorry, but please don't add equals/hashCode implementation to AbstractLogger. Concrete subclasses are okay of course. We had a few issues with this with another abstract Log4j class (can't find the Jira ticket now).
On Sun, Oct 18, 2015 at 2:00 PM, Matt Sicker <[email protected]> wrote: > Alright, I've got a pretty simple Serializable proxy class written. I'd > like to add equals() and hashCode() to AbstractLogger to aid in unit tests > and to formalize this concept of Logger uniqueness. > > On 16 October 2015 at 22:01, Matt Sicker <[email protected]> wrote: > >> The LocalizedMessageFactory constructor taking a ResourceBundle does >> raise an issue. Java 8 added a getBaseBundleName() method, but there's >> nothing for 7. >> >> On 15 October 2015 at 17:42, Gary Gregory <[email protected]> wrote: >> >>> Out of all the message factories, it looks like LocalizedMessageFactory >>> is only one that needs special treatment because you cannot serialize a >>> resource bundle. But we have the name, so that should be good enough. >>> >>> Gary >>> >>> On Thu, Oct 15, 2015 at 7:49 AM, Matt Sicker <[email protected]> wrote: >>> >>>> Well, as AbstractLogger is indeed Serializable, it looks like there's >>>> no way to remove that at this point. Making the MessageFactory Serializable >>>> sounds feasible. Are there any other components that may need to be >>>> serialized? If not, I can go ahead with the implementation. >>>> >>>> On 15 October 2015 at 09:15, Mikael Ståldal <[email protected]> >>>> wrote: >>>> >>>>> I dislike to have to make a class Serializable just because some >>>>> stupid framework (or stupid use of some non-stupid framework) requires it. >>>>> >>>>> I guess it was a mistake to make org.apache.logging.log4j.spi. >>>>> AbstractLogger Serializable in the first place. >>>>> >>>>> On Thu, Oct 15, 2015 at 6:56 AM, Ralph Goers < >>>>> [email protected]> wrote: >>>>> >>>>>> Well, MessageFactory is not Serializable but AbstractMessageFactory >>>>>> is. If the MessageFactory used by the Logger is serializable we could >>>>>> include it. If it is not we would have to treat it as transient. Upon >>>>>> deserialization we may find that the MessageFactory implementation >>>>>> doesn’t >>>>>> exist on the target platform, in which case we would have to just use the >>>>>> default. >>>>>> >>>>>> Ralph >>>>>> >>>>>> On Oct 14, 2015, at 8:27 PM, Gary Gregory <[email protected]> >>>>>> wrote: >>>>>> >>>>>> What if a logger does not use the default message factory? >>>>>> >>>>>> Gary >>>>>> >>>>>> >>>>>> -------- Original message -------- >>>>>> From: Ralph Goers <[email protected]> >>>>>> Date: 10/14/2015 19:32 (GMT-08:00) >>>>>> To: Log4J Developers List <[email protected]> >>>>>> Subject: Re: Is there anything besides the Logger name that uniquely >>>>>> identifies a Logger? >>>>>> >>>>>> I am not sure why you would need or want to serialize any plugins. >>>>>> Logger basically references the LoggerContext and the PrivateConfig. >>>>>> Both >>>>>> of these should be transient as it makes very little sense for those to >>>>>> be >>>>>> deserialized on a target implementation. But even serializing the actual >>>>>> Logger makes very little sense. On the target system you would want to >>>>>> call >>>>>> LogManager.getLogger(name) to recreate it. >>>>>> >>>>>> What I would suggest is to use the Proxy pattern that is used by >>>>>> Log4jLogEvent to serialize and deserialize the Logger. What would be >>>>>> different is that the serialization would basically only serialize the >>>>>> logger name and deserialization would call LogManager.getLogger(name). >>>>>> >>>>>> Ralph >>>>>> >>>>>> On Oct 14, 2015, at 7:02 PM, Matt Sicker <[email protected]> wrote: >>>>>> >>>>>> Basically, to naively serialize a Logger, you need to serialize all >>>>>> the plugins associated with it. As most things in log4j-core can be >>>>>> classified as either plugins or "framework" code, that's really most of >>>>>> the >>>>>> codebase. >>>>>> >>>>>> On 14 October 2015 at 18:00, Gary Gregory <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> If it's really 50%, then yeah, that's suspicious. I'd like to hear >>>>>>> if Ralph or Remko have any insights here. >>>>>>> >>>>>>> Gary >>>>>>> >>>>>>> On Wed, Oct 14, 2015 at 3:04 PM, Matt Sicker <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Most people use a static field to store the Logger, so most use >>>>>>>> cases don't require serialization. For instance fields, it might work >>>>>>>> better to declare it transient, and in that case, our implementation of >>>>>>>> Logger should not be Serializable at all. Otherwise, there are ways to >>>>>>>> serialize everything, but the way it looks, that will require making >>>>>>>> over >>>>>>>> 50% of the code base Serializable which doesn't smell right to me. >>>>>>>> >>>>>>>> On 14 October 2015 at 16:54, Gary Gregory <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> It would be a neat trick to only use the logger name for >>>>>>>>> ser/deser. But a logger only exists in a LC, so how would you >>>>>>>>> re-create the >>>>>>>>> Logger object. LogManager.getLogger(String) can't account for the >>>>>>>>> message >>>>>>>>> factory for example. Would knowing the class within which the static >>>>>>>>> Logger >>>>>>>>> resides be enough to know which LC to use? I do not see how :-( I >>>>>>>>> think we >>>>>>>>> need Ralph's insight here. >>>>>>>>> >>>>>>>>> The alternative would be... to recommend that all Logger >>>>>>>>> declarations be transient? That does not seen realistic, especially >>>>>>>>> accounting for code you cannot change. >>>>>>>>> >>>>>>>>> Gary >>>>>>>>> >>>>>>>>> On Wed, Oct 14, 2015 at 2:48 PM, Matt Sicker <[email protected]> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Perhaps besides a particular LoggerContext. I have an idea on how >>>>>>>>>> to significantly simplify the serialization of Logger, and if we can >>>>>>>>>> simply >>>>>>>>>> unserialize it based purely on its name, then that would save a lot >>>>>>>>>> of >>>>>>>>>> trouble. I don't remember if we've discussed this idea in the past, >>>>>>>>>> but I >>>>>>>>>> think this would be the best way to implement serialization in >>>>>>>>>> Logger. I >>>>>>>>>> wouldn't want to pass a Logger over the wire and clobber a possibly >>>>>>>>>> different configuration already in memory at the time, for instance. >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> 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]> >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> [image: MagineTV] >>>>> >>>>> *Mikael Ståldal* >>>>> Senior software developer >>>>> >>>>> *Magine TV* >>>>> [email protected] >>>>> Regeringsgatan 25 | 111 53 Stockholm, Sweden | www.magine.com >>>>> >>>>> Privileged and/or Confidential Information may be contained in this >>>>> message. If you are not the addressee indicated in this message >>>>> (or responsible for delivery of the message to such a person), you may >>>>> not copy or deliver this message to anyone. In such case, >>>>> you should destroy this message and kindly notify the sender by reply >>>>> email. >>>>> >>>> >>>> >>>> >>>> -- >>>> 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]> >
