You could use a custom MessageFactory. 

public class MyMessageFactory extends ParameterizedMessageFactory {

        private final String objId;

        public MyMessageFactory(Object obj) {
                this.objId = obj.toString();
        }
        
       @Override
        public Message newMessage(final String message, final Object... params) 
{
                return new ParameterizedMessage("{}: " + message, objId, 
params);
        }

}




then just do

public class MyClass  {

        private String id = "512";

        private Logger logger = 
LogManager.getLogger("com.mycorp.mycomponent.MyClass", new 
MyMessageFactory(this));

        public doWork() {
                logger.error("this is an error");
        }

        public String toString() {
                return this.id;
        }
}

When the error is logged you should see "512: this is an error" as the message.


Ralph

On May 27, 2013, at 8:15 AM, Lucie Boubée wrote:

> 2013/5/27 Remko Popma <rem...@yahoo.com>
> 
>> 
>> On 2013/05/27, at 23:50, Lucie Boubée <lbou...@gmail.com> wrote:
>> 
>>> Hi,
>>> 
>>> I use log4j2 beta 6 and I would like to add a prefix to all my messages.
>>> This prefix is passed to the constructor parameter and it depends on the
>>> instance of the class. So we're at the object level (not class or
>> thread).
>>> 
>>> For example, I have an A class instantiated like new A(152), so when I
>> use
>>> log.error("message") on this class, 152: is written just before the
>>> message. For new A(155),155: will be displayed instead.
>> 
>> Do you mean that the call to log.error("message") is inside class A?
>> In that case, how about simply using
>> log.error("{} message", myPrefix);
>> Would that work?
>> 
> 
> Yes, log.error("message") is calling inside class A.
> log.error('{} message", myPrefix) work, but I would like to avoid to add
> the prefix every time I read a log error, like with ThreadContext.
> 
>> 
>>> 
>>> I try to use ThreadContext.put on the constructor but, I don't know when
>>> logger wiil be call consequently the prefix is set to the last
>>> ThreadContext called but that does not necessarily correspond to the
>>> correct class instance
>>> I ask to stackoverflow (
>>> 
>> http://stackoverflow.com/questions/16723016/how-do-i-add-a-prefix-to-log4j-messages-at-the-object-level
>> )
>>> but
>>> it has not solved my problem.
>>> 
>>> --
>>> Lucie
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
>> For additional commands, e-mail: log4j-user-h...@logging.apache.org
>> 
>> 
> 
> 
> -- 
> Lucie BOUBÉE


---------------------------------------------------------------------
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