I see. For what it's worth, I like the embedded script idea. It seems like it could be very powerful.
On Mon, Sep 12, 2016 at 12:11 AM, Gary Gregory <[email protected]> wrote: > On Sep 10, 2016 11:33 PM, "Ralph Goers" <[email protected]> > wrote: > > > > But Gary said he didn’t want the OS390 appender created unless he is > running on OS390. > > Right, IRL, I am going to use an Appender that does some JNI calls that > will only work on OS/390. > > Gary > > > > > But your example makes me think we also need an AppenderRef Selector. > > > > Ralph > > > >> On Sep 10, 2016, at 5:28 PM, Remko Popma <[email protected]> wrote: > >> > >> What you can also do (without Log4j enhancements) is create a plugin > appender that takes two Appender-Refs and delegates to the correct one for > your application. > >> > >> In configuration this could look like this: > >> > >> <Appenders> > >> <FileAppender name="unix" ... > >> <FileAppender name="OS390" ... > >> > >> <MyDelegatingAppender name="delegator"> > >> <AppenderRef ref="unix" /> > >> <AppenderRef ref="OS390" /> > >> </MyDelegatingAppender> > >> > >> Remko > >> > >> Sent from my iPhone > >> > >> On 2016/09/11, at 3:48, Ralph Goers <[email protected]> wrote: > >> > >>> Oops. I forgot the closing CDATA tag in the script. > >>> > >>> Ralph > >>> > >>>> On Sep 10, 2016, at 11:43 AM, Ralph Goers <[email protected]> > wrote: > >>>> > >>>> Interesting. OS/390. I worked on MVS, OS/370, z/OS, etc many moons > ago but haven’t worked on a mainframe since 2001. > >>>> > >>>> This sort of sounds like you want an Appender Selector, which would > be an Appender that uses a Selector to figure out which Appender to > delegate to. This is a bit like the PatternSelector. I would imagine it > would make sense to implement AppenderSelectors and LayoutSelectors. You > probably would want to dynamically initialize the Appenders much like the > RoutingAppender does. > >>>> > >>>> Maybe it would look like: > >>>> > >>>> <Appenders> > >>>> <ScriptSelector name=“" default=“”> > >>>> <Script language=“groovy”><![CDATA[ > >>>> if (System.getProperty”os.name”).contains(“OS/390”)) then { > >>>> return “Socket”; > >>>> } else { > >>>> return “File”; > >>>> } > >>>> </Script> > >>>> <Appenders> > >>>> <SocketAppender name=“Socket” …/> > >>>> <FileAppender name=“File” …/> > >>>> </Appenders> > >>>> </ScriptSelector> > >>>> </Appenders> > >>>> > >>>> The thing is that this script would run every time the Selector was > accessed while it sounds like you would only want the script to run when > the Selector is initialized. We could do that too but the script would need > to be declared in a property that would only be used when the selector is > initialized. I would want to support being able to do both. > >>>> > >>>> Ralph > >>>> > >>>>> On Sep 10, 2016, at 11:04 AM, Gary Gregory <[email protected]> > wrote: > >>>>> > >>>>> <Appenders> > >>>>> <ScriptTest language="JavaScript"> > >>>>> <If>System.getProperty("os.name").contains("OS/390")</If> > >>>>> <True> > >>>>> <SocketAppender ...> > >>>>> </True> > >>>>> <False> > >>>>> <FileAppender ...> > >>>>> </False> > >>>>> </ScriptTest> > >>>>> </Appenders> > >>>>> > >>>>> ? > >>>>> > >>>>> > >>>>> On Sat, Sep 10, 2016 at 10:40 AM, Gary Gregory < > [email protected]> wrote: > >>>>>> > >>>>>> OK, I found https://logging.apache.org/log4j/2.x/manual/ > configuration.html#Scripts and I think I could use either: > >>>>>> > >>>>>> - Use composite configurations: One file for OS/390, one for all > other OSs; or > >>>>>> - Do it all in one configuration file (that seems simpler) > >>>>>> > >>>>>> It seems like there are some pieces missing to do what I want > conveniently. > >>>>>> > >>>>>> Should I define all appenders in <Appenders> and later use a script > to only add the one(s) I want in the <Root> section? > >>>>>> > >>>>>> Or, should the <Appenders> section itself be scripted to only add > the appenders I want? > >>>>>> > >>>>>> Since I expect the OS/390 appender will likely blow up running on a > different OK I do not want to create it unless I know it can run OK. > >>>>>> > >>>>>> I guess then I have a conditional section in both the Appenders and > in the Root section so that when I say <AppenderRef =...> we do not go look > for an appender that is not defined. > >>>>>> > >>>>>> Thoughts? > >>>>>> > >>>>>> A narrow solution would be to add an "os" attribute to all > appenders but that seems lame. os="OS/390" and os="!OS/390" means also > knowing about "not", yikes. > >>>>>> > >>>>>> Gary > >>>>>> > >>>>>> On Sat, Sep 10, 2016 at 10:05 AM, Gary Gregory < > [email protected]> wrote: > >>>>>>> > >>>>>>> Hi, > >>>>>>> > >>>>>>> I can't seem to find on our site the scripting support that was > recently added (or is that only in master?). > >>>>>>> > >>>>>>> What I need to do is only add a specific appender when running on > a specific OS (USS on OS/390 if you must know). Then only add a different > appender when not running on that OS. > >>>>>>> > >>>>>>> I'd rather not have to hard-code this and make thing more > complicated. > >>>>>>> > >>>>>>> Thoughts? > >>>>>>> > >>>>>>> Gary > >>>>>>> > >>>>>>> -- > >>>>>>> E-Mail: [email protected] | [email protected] > >>>>>>> Java Persistence with Hibernate, Second Edition > >>>>>>> JUnit in Action, Second Edition > >>>>>>> Spring Batch in Action > >>>>>>> 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 > >>>>>> JUnit in Action, Second Edition > >>>>>> Spring Batch in Action > >>>>>> 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 > >>>>> JUnit in Action, Second Edition > >>>>> Spring Batch in Action > >>>>> Blog: http://garygregory.wordpress.com > >>>>> Home: http://garygregory.com/ > >>>>> Tweet! http://twitter.com/GaryGregory > >>>> > >>>> > >>> > > >
