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 <garydgreg...@gmail.com>
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 <
> ap.giannaki...@gmail.com> 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 <garydgreg...@gmail.com>
> > wrote:
> >
> > > On Tue, Jan 26, 2016 at 1:06 PM, Apostolis Giannakidis <
> > > ap.giannaki...@gmail.com> 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 <
> > ralph.go...@dslextreme.com
> > > >
> > > > 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 <
> garydgreg...@gmail.com>
> > > > > 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 <boa...@gmail.com>
> > > > wrote:
> > > > > >
> > > > > >> You could always use reflection to access it for now.
> > > > > >>
> > > > > >> On 26 January 2016 at 14:17, Apostolis Giannakidis <
> > > > > >> ap.giannaki...@gmail.com
> > > > > >>> 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 <
> > > > > ralph.go...@dslextreme.com
> > > > > >>>
> > > > > >>> 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 <
> > > > > >>>> ap.giannaki...@gmail.com> 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:
> > log4j-user-unsubscr...@logging.apache.org
> > > > > >>>> For additional commands, e-mail:
> > > log4j-user-h...@logging.apache.org
> > > > > >>>>
> > > > > >>>>
> > > > > >>>
> > > > > >>
> > > > > >>
> > > > > >>
> > > > > >> --
> > > > > >> Matt Sicker <boa...@gmail.com>
> > > > > >>
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
> > > > > > 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: log4j-user-unsubscr...@logging.apache.org
> > > > > For additional commands, e-mail:
> log4j-user-h...@logging.apache.org
> > > > >
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
> > > 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: garydgreg...@gmail.com | ggreg...@apache.org
> 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