Sure, Object makes sense.

Gary

On Tue, Jan 26, 2016 at 4:24 PM, Apostolis Giannakidis <
[email protected]> wrote:

> One thing to note here. Correct me if I am wrong, but the map should
> be Map<String,
> Object> because not all attributes are Strings. From the top of my head, I
> know that an attribute could also be a boolean.
>
> On Wed, Jan 27, 2016 at 12:06 AM, Gary Gregory <[email protected]>
> wrote:
>
> > I could see AbstractAppender implementing a getAttributes() method like
> > this:
> >
> >     public Map<String, String> getAttributes() {
> >         Map<String, String> map = new HashMap<>();
> >         fillAttributeMap(map);
> >         // (1) should the map be read-only? why?
> >         // (2) if the map is cached in an ivar, the it must be updated by
> > each appender when an attribute changes, so
> >         // I'd say no and follow the KISS principle for now.
> >         return map;
> >     }
> >
> >     protected void fillAttributeMap(Map<String, String> map) {
> >         // ...
> >     }
> >
> > The boilerplate of creating and/or managing the map can be in
> > getAttributes().
> > Actually filling in the map in is done in fillAttributeMap() which each
> > appender can override.
> >
> > fillAttributeMap() could be abstract to force each appender to make sure
> > developers pay attention to providing an implementation.
> >
> > Gary
> >
> >
> > On Tue, Jan 26, 2016 at 3:46 PM, Apostolis Giannakidis <
> > [email protected]> wrote:
> >
> > > Well, since the idea is to add it to the Appender interface, it means
> > that
> > > all concrete Appenders need to be modified as well. So, yes, I can give
> > it
> > > a try to implement it for all the Appenders. One other simple way would
> > be
> > > to implement it once in the AbstractAppender so that all its subclasses
> > > will inherit it.
> > >
> > > On Tue, Jan 26, 2016 at 9:15 PM, Gary Gregory <[email protected]>
> > > wrote:
> > >
> > > > On Tue, Jan 26, 2016 at 1:06 PM, Apostolis Giannakidis <
> > > > [email protected]> wrote:
> > > >
> > > > > Actually, since this seems to be a useful feature, I would love to
> do
> > > the
> > > > > patch myself and contribute it to the project, if you don't mind.
> > > > >
> > > >
> > > > Do you plan on implementing this for all Appenders?
> > > >
> > > > Gary
> > > >
> > > > >
> > > > > On Tue, Jan 26, 2016 at 8:56 PM, Ralph Goers <
> > > [email protected]
> > > > >
> > > > > wrote:
> > > > >
> > > > > > Actually, I kind of like the idea of adding a getAttributes()
> > method
> > > to
> > > > > > the Appender interface. Then each concrete Appender would do:
> > > > > >
> > > > > > public void getAttributes() {
> > > > > >     Map<String, String> attributes = new HashMap<>();
> > > > > >     super.getAttributes(attributes):
> > > > > >     attributes.put(“myAttribute1”, “value1”);
> > > > > >     return Collections.unmodifiableMap(attributes);
> > > > > > }
> > > > > >
> > > > > >
> > > > > >
> > > > > > > On Jan 26, 2016, at 1:28 PM, Gary Gregory <
> > [email protected]>
> > > > > > wrote:
> > > > > > >
> > > > > > > How about adding getters for the fields
> > > > > > > in org.apache.logging.log4j.core.net.AbstractSocketManager?
> > > > > > >
> > > > > > > Gary
> > > > > > >
> > > > > > > On Tue, Jan 26, 2016 at 12:20 PM, Matt Sicker <
> [email protected]>
> > > > > wrote:
> > > > > > >
> > > > > > >> You could always use reflection to access it for now.
> > > > > > >>
> > > > > > >> On 26 January 2016 at 14:17, Apostolis Giannakidis <
> > > > > > >> [email protected]
> > > > > > >>> wrote:
> > > > > > >>
> > > > > > >>> Thank you very much for the prompt reply Ralph.
> > > > > > >>>
> > > > > > >>> As far as I can see, the SyslogAppender class does not
> expose a
> > > way
> > > > > to
> > > > > > >>> access these attributes. So, if there is no other way of
> > > accessing
> > > > > > these
> > > > > > >>> attributes, then I am not able to retrieve the attributes
> that
> > I
> > > > want
> > > > > > >> from
> > > > > > >>> the existing SyslogAppender implementation. If I understand
> > > > > correctly,
> > > > > > >>> correct me if I am wrong, I might have to create my own that
> > > > exposes
> > > > > > >> these
> > > > > > >>> attributes.
> > > > > > >>>
> > > > > > >>> Apos
> > > > > > >>>
> > > > > > >>> On Tue, Jan 26, 2016 at 8:03 PM, Ralph Goers <
> > > > > > [email protected]
> > > > > > >>>
> > > > > > >>> wrote:
> > > > > > >>>
> > > > > > >>>> Not exactly. You can do:
> > > > > > >>>>
> > > > > > >>>> Appender appender =
> > > > > > >> ctx.getConfiguration().getAppender(“syslogAppender”);
> > > > > > >>>>
> > > > > > >>>> then you would have to do
> > > > > > >>>>
> > > > > > >>>> SyslogAppender syslogAppender = (SyslogAppender) appender;
> > > > > > >>>>
> > > > > > >>>> normally you would probably use instanceof to verify it is
> > > > actually
> > > > > a
> > > > > > >>>> SyslogAppender.
> > > > > > >>>>
> > > > > > >>>> Once you have that you can call whatever methods the
> > > > SyslogAppender
> > > > > > >>>> exposes for getting its attributes. They are not stored in a
> > Map
> > > > > > >> however,
> > > > > > >>>> so you can’t just call a generic getAttribute method.
> > > > > > >>>>
> > > > > > >>>> Ralph
> > > > > > >>>>
> > > > > > >>>>
> > > > > > >>>>> On Jan 26, 2016, at 11:58 AM, Apostolis Giannakidis <
> > > > > > >>>> [email protected]> wrote:
> > > > > > >>>>>
> > > > > > >>>>> Hello team,
> > > > > > >>>>>
> > > > > > >>>>> I have created a logger with an appender using the
> > > > > > >> ConfigurationBuilder
> > > > > > >>>> and
> > > > > > >>>>> the AppenderComponentBuilder.
> > > > > > >>>>>
> > > > > > >>>>> Let's say that this is how I create my appender:
> > > > > > >>>>>
> > > > > > >>>>> AppenderComponentBuilder appenderBuilder =
> > > > > > >>>>>               builder.newAppender( "syslogAppender",
> > "Syslog" )
> > > > > > >>>>>               .addAttribute( "protocol", "TCP" )
> > > > > > >>>>>               .addAttribute( "host", "localhost" )
> > > > > > >>>>>               .addAttribute( "port", 514 )
> > > > > > >>>>>               .addAttribute( "facility", "LOCAL2" )
> > > > > > >>>>>               .addAttribute( "immediateFlush", true )
> > > > > > >>>>>               .addAttribute( "newLine", true );
> > > > > > >>>>>
> > > > > > >>>>> Then, after I finish creating the builder I use the
> > > > > > >>>>> Configurator.initialize( builder.build() ) to get the
> > > > > LoggerContext.
> > > > > > >>>>>
> > > > > > >>>>> Is there any way I can access the attributes of the
> appender
> > > > > through
> > > > > > >>> the
> > > > > > >>>>> LoggerContext?
> > > > > > >>>>>
> > > > > > >>>>> For example something like this:
> > > > > > >>>>>
> > > > > > >>>>> LoggerContext ctx = Configurator.initialize(
> builder.build()
> > );
> > > > > > >>>>>
> > > > > > >>>>> String hostname =
> > > > > > >>>>>
> > > > > > >>>>
> > > > > > >>>
> > > > > > >>
> > > > > >
> > > > >
> > > >
> > >
> >
> ctx.getConfiguration()..getAppenders().get("syslogAppender").getAttribute("host");
> > > > > > >>>>>
> > > > > > >>>>> Thank you all very much for your help.
> > > > > > >>>>>
> > > > > > >>>>> Apostolis
> > > > > > >>>>
> > > > > > >>>>
> > > > > > >>>>
> > > > > > >>>>
> > > > >
> ---------------------------------------------------------------------
> > > > > > >>>> To unsubscribe, e-mail:
> > > [email protected]
> > > > > > >>>> For additional commands, e-mail:
> > > > [email protected]
> > > > > > >>>>
> > > > > > >>>>
> > > > > > >>>
> > > > > > >>
> > > > > > >>
> > > > > > >>
> > > > > > >> --
> > > > > > >> 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
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > ---------------------------------------------------------------------
> > > > > > To unsubscribe, e-mail:
> [email protected]
> > > > > > For additional commands, e-mail:
> > [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
> > > >
> > >
> >
> >
> >
> > --
> > 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
> >
>



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

Reply via email to