Here's an idea for an addition to 2.1: use this? http://docs.oracle.com/javase/6/docs/platform/jvmti/jvmti.html
On 8 August 2014 20:54, Remko Popma <[email protected]> wrote: > > > On 2014/08/09, at 10:36, Gary Gregory <[email protected]> wrote: > > > >> On Fri, Aug 8, 2014 at 9:19 PM, Remko Popma <[email protected]> > wrote: > >> > >> It would have been nice to have a fully automatic solution, and it's too > >> bad that the JMX idea doesn't work, but bringing in new dependencies for > >> this seems a bit overkill to me... > > > > Well, the JMX works to pickup JVM arguments but not main arguments. I do > > not know if that is useful though. So I won't include it for a first cut. > > > > > >> > >> I actually think Gary's solution to ask the user to add one line of code > >> will be hard to beat for simplicity and ease of use. > > > > Yes, simple is nice and it is very little code. > > > > Should this go in now for 2.0.2 or wait for 2.1? > > Up to you. > -Remko > > > > > Gary > > > > > >> It solves Arwen's original problem and is generic enough that many users > >> can benefit from it. > >> > >> Sent from my iPhone > >> > >>> On 2014/08/09, at 6:40, Matt Sicker <[email protected]> wrote: > >>> > >>> I was thinking it would be easier to create a main() method wrapper or > >> use > >>> byte code weaving to automatically wrap it. However, I realized that > this > >>> wouldn't be useful for applications running in server containers like > >>> Tomcat without modifying that source. > >>> > >>> > >>>> On 8 August 2014 07:56, Remko Popma <[email protected]> wrote: > >>>> > >>>> Ouch! > >>>> > >>>> > >>>> On Fri, Aug 8, 2014 at 9:24 PM, Gary Gregory <[email protected]> > >>>> wrote: > >>>> > >>>>> It's worse than that, the JMX look up does not provide access to the > >> main > >>>>> args. The other lookup I created and attached to the jira needs to be > >>>>> initialized by the user. > >>>>> > >>>>> Gary > >>>>> > >>>>> > >>>>>> On Fri, Aug 8, 2014 at 7:41 AM, Remko Popma <[email protected]> > >>>>> wrote: > >>>>> > >>>>>> Note that log4j will only invoke this logic if the application has a > >>>>>> lookup of the form ${main:<argnum>} in its configuration. > >>>>>> > >>>>>> In environments without JMX the app may even need to explicitly > >>>>> initialize > >>>>>> the main arguments map. > >>>>>> > >>>>>> This doesn't happen without being requested by the app, so I don't > >>>> share > >>>>>> the concern. > >>>>>> > >>>>>> Sent from my iPhone > >>>>>> > >>>>>>>> On 2014/08/08, at 16:54, Mikael Ståldal < > >>>>>>> [email protected]> wrote: > >>>>>>> > >>>>>>> To me, it seems conceptually wrong for a library (like Log4j) to > read > >>>>>>> command line arguments behind the scenes without involvement from > the > >>>>>>> application. Command line arguments are for the application to > parse. > >>>>>>> > >>>>>>> System properties is the proper way to configure a library without > >>>>>>> involvement from the application > >>>>>>> > >>>>>>> > >>>>>>>> On Thu, Aug 7, 2014 at 7:02 PM, Gary Gregory < > >>>> [email protected]> > >>>>>> wrote: > >>>>>>>> > >>>>>>>> Please see this experiment: > >>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-771 > >>>>>>>> > >>>>>>>> Gary > >>>>>>>> > >>>>>>>> > >>>>>>>> On Thu, Aug 7, 2014 at 7:57 AM, Gary Gregory < > >>>> [email protected]> > >>>>>>>> wrote: > >>>>>>>> > >>>>>>>>> On an Oracle JVM, you use a system property lookup to get the > >>>>>>>>> "sun.java.command" system property which gives you the whole > >>>> command > >>>>>> line > >>>>>>>>> but we do not have a syntax to parse it... > >>>>>>>>> > >>>>>>>>> Gary > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On Thu, Aug 7, 2014 at 2:27 AM, Gary Gregory < > >>>> [email protected] > >>>>>> > >>>>>>>>> wrote: > >>>>>>>>> > >>>>>>>>>> It'll be more complicated than just grabbing the main args of > >>>>> course. > >>>>>>>>>> > >>>>>>>>>> If I say something like ${main:0} that seems easy to deal with, > >>>> but > >>>>>> when > >>>>>>>>>> I say ${main:--file} or ${main:-f} or ${main:-file}, that should > >>>>>> pickup > >>>>>>>> the > >>>>>>>>>> _next_ arg in the array. What if it is missing or the next arg > is > >>>>>>>> another > >>>>>>>>>> dash option? Too bad I guess. What are the rules? > >>>>>>>>>> > >>>>>>>>>> I could see two lookup classes: > >>>>>>>>>> - One is a named Map Lookup built from a String[], which would > be > >>>> a > >>>>>>>>>> singleton called by the main method: > >>>>>>>>>> MainArgumentsLookup.SINGELTON.set(args); Is the args array a > >>>>> reference > >>>>>>>> or a > >>>>>>>>>> deep copy? > >>>>>>>>>> - Another is the more complex and vendor dependent (and > unproven) > >>>>>> stack > >>>>>>>>>> walker. > >>>>>>>>>> > >>>>>>>>>> Gary > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>>> On Wed, Aug 6, 2014 at 11:45 PM, Matt Sicker <[email protected] > > > >>>>>> wrote: > >>>>>>>>>>> > >>>>>>>>>>> Hey, it's better than having to use sun.util.Reflection! > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>>> On 6 August 2014 20:19, Gary Gregory <[email protected]> > >>>>>> wrote: > >>>>>>>>>>>> > >>>>>>>>>>>> And worse: vendor specific! > >>>>>>>>>>>> > >>>>>>>>>>>> Gary > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>>> On Wed, Aug 6, 2014 at 9:05 PM, Remko Popma < > >>>>> [email protected] > >>>>>>> > >>>>>>>>>>>> wrote: > >>>>>>>>>>>> > >>>>>>>>>>>>> Oooh... A little naughty, but a lot of fun! :-) > >>>>>>>>>>>>> Thanks for the pointer! > >>>>>>>>>>>>> > >>>>>>>>>>>>> Sent from my iPhone > >>>>>>>>>>>>> > >>>>>>>>>>>>>> On 2014/08/07, at 9:44, Gary Gregory < > [email protected]> > >>>>>>>>>>> wrote: > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> With some debug API hackery: > >> > http://docs.oracle.com/javase/7/docs/jdk/api/jpda/jdi/com/sun/jdi/StackFrame.html > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Gary > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>>> On Wed, Aug 6, 2014 at 8:36 PM, Remko Popma < > >>>>>>>>>>> [email protected]> > >>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> I don't follow... If you walk the stack trace you can find > >>>> the > >>>>>>>>>>> name of > >>>>>>>>>>>>> the > >>>>>>>>>>>>>>> original class whose main() method was called, but how > would > >>>>>>>> that > >>>>>>>>>>> give > >>>>>>>>>>>>> you > >>>>>>>>>>>>>>> access to the main method's parameter values? > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Sent from my iPhone > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> On 2014/08/07, at 9:26, Gary Gregory < > >>>> [email protected]> > >>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Yes you are right but the stack walker could be used even > if > >>>>>>>> you > >>>>>>>>>>> do > >>>>>>>>>>>> not > >>>>>>>>>>>>>>> control to source for main. Maybe a script calls a main and > >>>>> then > >>>>>>>>>>> my > >>>>>>>>>>>> app > >>>>>>>>>>>>>>> plugin gets called and I want to also follow the verbose > >>>>> command > >>>>>>>>>>> line > >>>>>>>>>>>>>>> setting. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Gary > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> <div>-------- Original message --------</div><div>From: > >>>> Ralph > >>>>>>>>>>> Goers < > >>>>>>>>>>>>>>> [email protected]> </div><div>Date:08/06/2014 > >>>> 19:18 > >>>>>>>>>>>>>>> (GMT-05:00) </div><div>To: Log4J Users List < > >>>>>>>>>>>>>>> [email protected]> </div><div>Subject: Re: Set > >>>> the > >>>>>>>>>>> file > >>>>>>>>>>>>> name > >>>>>>>>>>>>>>> based on command line args </div><div> > >>>>>>>>>>>>>>>> </div>Wouldn’t it be easier to have a Lookup that your > main > >>>>>>>>>>> called > >>>>>>>>>>>> and > >>>>>>>>>>>>>>> just passed the arguments? But yeah, it should be possible > >>>> to > >>>>>>>> do > >>>>>>>>>>> what > >>>>>>>>>>>>> you > >>>>>>>>>>>>>>> are suggesting. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Ralph > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> On Aug 6, 2014, at 4:09 PM, Gary Gregory < > >>>>>>>>>>> [email protected]> > >>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> I wonder if we could write a "MainArgumentsLookup" that > >>>> finds > >>>>>>>>>>> the > >>>>>>>>>>>> main > >>>>>>>>>>>>>>>>> thread and walks up the stack to the public static > >>>>>>>>>>> main(String[]) > >>>>>>>>>>>> main > >>>>>>>>>>>>>>>>> methods and gets the arguments from the stack... > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Gary > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> On Wed, Aug 6, 2014 at 6:54 PM, Ralph Goers < > >>>>>>>>>>>>> [email protected] > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Well…. > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> You would really be passing the name of the file to the > >>>>>>>>>>> Appender, > >>>>>>>>>>>>> not a > >>>>>>>>>>>>>>>>>> Logger. Loggers only reference Appenders so you can’t > >>>>> really > >>>>>>>>>>>>> configure > >>>>>>>>>>>>>>>>>> them with Appender configuration data. That said, Log4j > 2 > >>>>>>>>>>> provides > >>>>>>>>>>>> a > >>>>>>>>>>>>>>> few > >>>>>>>>>>>>>>>>>> ways you could do this: > >>>>>>>>>>>>>>>>>> 1. Set a system property and reference it via > >>>>>>>>>>> ${sys:propertyName} > >>>>>>>>>>>> in > >>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>> configuration. The manual has examples of this. > >>>>>>>>>>>>>>>>>> 2. Create a custom Lookup Plugin and then register the > >>>> file > >>>>>>>>>>> name > >>>>>>>>>>>> with > >>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>> Lookup. Then reference it from the configuration as > >>>>>>>>>>> ${myLookup: > >>>>>>>>>>>>> key} > >>>>>>>>>>>>>>>>>> where myLookup is the name of your custom Lookup and key > >>>> is > >>>>>>>> the > >>>>>>>>>>>> name > >>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>> represents the file name value. > >>>>>>>>>>>>>>>>>> 3. Create a custom Configuration the extends > >>>>> XMLConfiguration > >>>>>>>>>>> or > >>>>>>>>>>>>>>>>>> JSONConfiguration. Pass the file name to that class and > >>>> have > >>>>>>>>>>> it add > >>>>>>>>>>>>>>> that as > >>>>>>>>>>>>>>>>>> a property to the properties Map in the configuration. > The > >>>>>>>> XML > >>>>>>>>>>>> could > >>>>>>>>>>>>>>> then > >>>>>>>>>>>>>>>>>> just reference it as ${propertyName}. > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Ralph > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> On Aug 6, 2014, at 2:03 PM, Arwen Pond <[email protected] > > > >>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> My application takes a parameter where the user can > >>>> specify > >>>>>>>>>>> the > >>>>>>>>>>>> log > >>>>>>>>>>>>>>>>>> file. I'd like to pass this parameter to the Logger > which > >>>>>>>>>>> uses a > >>>>>>>>>>>>>>>>>> FileAppender. I am not sure how to do this in log4j 2. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Thanks, > >>>>>>>>>>>>>>>>>>> Arwen > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> This electronic mail message contains information that > >>>> (a) > >>>>>>>> is > >>>>>>>>>>> or > >>>>>>>>>>>>>>>>>>> may be CONFIDENTIAL, PROPRIETARY IN NATURE, OR > OTHERWISE > >>>>>>>>>>>>>>>>>>> PROTECTED > >>>>>>>>>>>>>>>>>>> BY LAW FROM DISCLOSURE, and (b) is intended only for > the > >>>>> use > >>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>> the addressee(s) named herein. If you are not an > >>>> intended > >>>>>>>>>>>>>>>>>>> recipient, please contact the sender immediately and > take > >>>>>>>> the > >>>>>>>>>>>>>>>>>>> steps necessary to delete the message completely from > >>>> your > >>>>>>>>>>>>>>>>>>> computer system. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Not Intended as a Substitute for a Writing: > >>>> Notwithstanding > >>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>> Uniform Electronic Transaction Act or any other law of > >>>>>>>> similar > >>>>>>>>>>>>>>>>>>> effect, absent an express statement to the contrary, > this > >>>>>>>>>>> e-mail > >>>>>>>>>>>>>>>>>>> message, its contents, and any attachments hereto are > not > >>>>>>>>>>>>>>>>>>> intended > >>>>>>>>>>>>>>>>>>> to represent an offer or acceptance to enter into a > >>>>> contract > >>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>> are not otherwise intended to bind this sender, > >>>>>>>>>>>>>>>>>>> barnesandnoble.com > >>>>>>>>>>>>>>>>>>> llc, barnesandnoble.com inc. or any other person or > >>>>> entity. > >>>>>> > --------------------------------------------------------------------- > >>>>>>>>>>>>>>>>>> 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 > >>>>> --------------------------------------------------------------------- > >>>>>>>>>>>>>>>> To unsubscribe, e-mail: > >>>>>>>>>>> [email protected] > >>>>>>>>>>>>>>>> For additional commands, e-mail: > >>>>>>>>>>> [email protected] > >>>>> --------------------------------------------------------------------- > >>>>>>>>>>>>>>> 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 > >>>> --------------------------------------------------------------------- > >>>>>>>>>>>>> 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 > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> -- > >>>>>>>>>>> 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 > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> -- > >>>>>>>>> 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 > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> -- > >>>>>>> Mikael Ståldal > >>>>>>> Chief Software Architect > >>>>>>> *Appear* > >>>>>>> Phone: +46 8 545 91 572 > >>>>>>> Email: [email protected] > >>>>>> > >>>>>> > --------------------------------------------------------------------- > >>>>>> 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 > >>> > >>> > >>> > >>> -- > >>> Matt Sicker <[email protected]> > >> > >> --------------------------------------------------------------------- > >> 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 > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > -- Matt Sicker <[email protected]>
