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

Reply via email to