I know this isn't intuitive but you need to add a second '$" and make it "$${ctx:id}". This is because the variables are replaced first when the configuration file is read. However, you want this variable to be resolved at runtime, not when the configuration is parsed. With two dollar sign characters the first is simply removed when the configuration file is read. Then when the Layout is processed for the event a variable with a single dollar sign will be left and that will be replaced with the actual value. Note that with a system property you would only want to use a single dollar sign as the value won't change and so should be replaced when the configuration is processed.
Ralph On Dec 21, 2012, at 4:23 PM, Michael Minella wrote: > > I'm looking at the log4j 2 's thread specific features and had a question. In > my code I set an id as follows: > > > > ThreadContext.put( "id" , "Main" ); > > > and attempt to reference it in my configuration file as shown below: > > > > < File name = "File" fileName = "/tmp/myLog.log" > > < PatternLayout pattern = "%X{id} %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} > - %msg ${ctx:id} %n" /> > </ File > > > > If I use the lookup in the pattern layout to test it, it works fine. However, > if I move that lookup to the fileName attribute in the line above, the > replacement doesn't occur (my file ends up being named /tmp/${ctx.id}.log for > example). Is that a limitation of that lookup or am I missing something? Any > insight that can be provided is appreciated. Thanks in advance! > > Thanks, > Michael T Minella --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-user-h...@logging.apache.org