You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by Lucie Boubée <lb...@gmail.com> on 2013/05/27 16:50:29 UTC

Fwd: How do I add a prefix to log4j messages (at the object level)

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.

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

Re: How do I add a prefix to log4j messages (at the object level)

Posted by Ralph Goers <ra...@dslextreme.com>.
Thanks.  We need to add that example to a wiki page or add it to some examples on the web site.

Ralph

On May 28, 2013, at 8:08 AM, Lucie Boubée wrote:

> Thanks, I implements MessageFactory and it's works
> 
> 
> 2013/5/27 Ralph Goers <ra...@dslextreme.com>
> 
>> 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 <re...@yahoo.com>
>>> 
>>>> 
>>>> On 2013/05/27, at 23:50, Lucie Boubée <lb...@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-unsubscribe@logging.apache.org
>>>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>>>> 
>>>> 
>>> 
>>> 
>>> --
>>> Lucie BOUBÉE
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>> 
>> 
> 
> 
> -- 
> Lucie BOUBÉE


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Re: How do I add a prefix to log4j messages (at the object level)

Posted by Lucie Boubée <lb...@gmail.com>.
Thanks, I implements MessageFactory and it's works


2013/5/27 Ralph Goers <ra...@dslextreme.com>

> 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 <re...@yahoo.com>
> >
> >>
> >> On 2013/05/27, at 23:50, Lucie Boubée <lb...@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-unsubscribe@logging.apache.org
> >> For additional commands, e-mail: log4j-user-help@logging.apache.org
> >>
> >>
> >
> >
> > --
> > Lucie BOUBÉE
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>


-- 
Lucie BOUBÉE

Re: How do I add a prefix to log4j messages (at the object level)

Posted by Ralph Goers <ra...@dslextreme.com>.
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 <re...@yahoo.com>
> 
>> 
>> On 2013/05/27, at 23:50, Lucie Boubée <lb...@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-unsubscribe@logging.apache.org
>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>> 
>> 
> 
> 
> -- 
> Lucie BOUBÉE


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Re: How do I add a prefix to log4j messages (at the object level)

Posted by Lucie Boubée <lb...@gmail.com>.
2013/5/27 Remko Popma <re...@yahoo.com>

>
> On 2013/05/27, at 23:50, Lucie Boubée <lb...@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-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>


-- 
Lucie BOUBÉE

Re: How do I add a prefix to log4j messages (at the object level)

Posted by Remko Popma <re...@yahoo.com>.
On 2013/05/27, at 23:50, Lucie Boubée <lb...@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?

> 
> 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-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org