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 >