You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Vijay Kumar <vi...@gmail.com> on 2016/06/16 06:50:53 UTC

how to create log files user level

Hi Team,

We have a requirement to create a log either at User level or at User
session level.
Please provide your inputs on this.

User level means a separate log to be created for that User and the same
should be used always for writing the log.
or
There will be one log file and within that log there should be a context
information to identify the user which we will do but want to know which
approach we have to use

Session level means, is it possible to turn the logger mode to INFO for a
particular session and the log to be written in one of the file at
server/client side?

Our application is built with Struts 1.2.
Webserver used is Tomcat.
Currently using Tomcat JULI Logging.

Thanks,
Vijay G

RE: how to create log files user level

Posted by Bill Wolosek <bw...@kimobility.com>.
Hi Vijay,

We have accomplished user level logging using log4j's MDC feature along with a custom interceptor in Struts 2.  The interceptor injects the user name into the MDC context before any struts actions fire and then removes it from the MDC context after all actions have fired for a specific web request.  This approach is thread safe and we have had great success with it.

Interceptor:

public class MDCLogInterceptor implements Interceptor {

	private static final long serialVersionUID = 1L;
	private static final String USER_NAME_KEY = "userName";

	public String intercept(ActionInvocation invocation) throws Exception {
		try {
			String userName = //either get this from the session if using application authentication or remoteUserId if using tomcat authentication;			
			if (!StringUtils.isBlank(userName)){
				MDC.put(USER_NAME_KEY, userName);
			}
			
			return invocation.invoke();
		} finally {			
			if (MDC.get(USER_NAME_KEY) != null){
				MDC.remove(USER_NAME_KEY);
			}
		}
	}

	public void destroy() {
		// TODO Auto-generated method stub		
	}

	public void init() {
		// TODO Auto-generated method stub		
	}
}

Don't forget to add the interceptor to your interceptor stack in your struts config.  We have it listed first.

Add the MDC value to your log4j config:
<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
	<param name="File" value="${logs}/YourLogName.log" />
		<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern" value="%d{MM/dd/yyyy HH:mm:ss.SSS} [%t] %-5p %x User[%X{userName}] %C{1}.%M: %m%n" />
	</layout>
</appender>

The "User[%X{userName}] " is the MDC part that adds the username to the log files from the value inserted by the interceptor.  You can move it to anywhere in the appender pattern you want.

Thank you,
Bill

-----Original Message-----
From: Mark Thomas [mailto:markt@apache.org] 
Sent: Thursday, June 16, 2016 3:18 AM
To: Tomcat Users List
Subject: Re: how to create log files user level

On 16/06/2016 09:05, Vijay Kumar wrote:
> Hi Andre,
> 
> Thanks for the update.
> 
> Could you please give me some information whether it's possible or not 
> to generate user level log because i have tried using log4j but it failed.
> 
> Appreciate your help on this.

Either per user logging or per session logging should be possible. One of potentially many ways is via a separate Logger for each session/user.
If you give each Logger a unique name based on the user name or session ID (both of which should be unique) and use a common prefix you should be able to direct all logs with that prefix to a file. With in the file you then use the Logger name to identify the source of the log message.

Mark


> 
> Thanks,
> Vijay G
> 
> On Thu, Jun 16, 2016 at 12:59 PM, André Warnier (tomcat) 
> <aw...@ice-sa.com>
> wrote:
> 
>>
>> Thanks. The rest below, as preferred on this mailing list.
>>
>>>
>>> Thanks,
>>> Vijay G
>>>
>>> On Thu, Jun 16, 2016 at 12:40 PM, André Warnier (tomcat) 
>>> <aw...@ice-sa.com>
>>> wrote:
>>>
>>> On 16.06.2016 08:50, Vijay Kumar wrote:
>>>>
>>>> Hi Team,
>>>>>
>>>>> We have a requirement to create a log either at User level or at 
>>>>> User session level.
>>>>> Please provide your inputs on this.
>>>>>
>>>>> User level means a separate log to be created for that User and 
>>>>> the same should be used always for writing the log.
>>>>> or
>>>>> There will be one log file and within that log there should be a 
>>>>> context information to identify the user which we will do but want 
>>>>> to know which approach we have to use
>>>>>
>>>>> Session level means, is it possible to turn the logger mode to 
>>>>> INFO for a particular session and the log to be written in one of 
>>>>> the file at server/client side?
>>>>>
>>>>> Our application is built with Struts 1.2.
>>>>> Webserver used is Tomcat.
>>>>> Currently using Tomcat JULI Logging.
>>>>>
>>>>>
>>>>> Tomcat version ?
>>>>
>>>>
>> On 16.06.2016 09:18, Vijay Kumar wrote:
>>> We are using Tomcat 7.0.33 and 7.0.62
>>>
>>> 7.0.33 when Customer is on Java 1.7
>>> 7.0.62 when our customer is on 1.8
>>>
>>> But we can upgrade to 8 if required to achieve the logging support
>>
>> I don't think that there is anything "standard" that will allow to 
>> create user-specific logfiles.
>> What you want is more an application-level thing, so it would have to 
>> be resolved at the application level.
>> You can create your own logger and do what you want. Any application 
>> module can call getRemoteUser(), and use the result to insert it in 
>> all the log messages that it issues.
>> Of course this will only work in code running within an application, 
>> and only when there is an authenticated user.
>> To avoid a lot of overhead (also at the system administration level), 
>> I would recommend to keep using the standard logfiles, and just 
>> insert a user-id "marker" in the log messages of interest.  This 
>> standard logfile can then be filtered a-posteriori by an external 
>> log-processing utility, which can then generate any individual files 
>> that you want.  That is likely to be a lot simpler to do than 
>> generating user-specific logfiles at the Tomcat level, and also would have a lot less impact on performance.
>>
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>>
>>
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: how to create log files user level

Posted by Mark Thomas <ma...@apache.org>.
On 16/06/2016 09:05, Vijay Kumar wrote:
> Hi Andre,
> 
> Thanks for the update.
> 
> Could you please give me some information whether it's possible or not to
> generate user level log because i have tried using log4j but it failed.
> 
> Appreciate your help on this.

Either per user logging or per session logging should be possible. One
of potentially many ways is via a separate Logger for each session/user.
If you give each Logger a unique name based on the user name or session
ID (both of which should be unique) and use a common prefix you should
be able to direct all logs with that prefix to a file. With in the file
you then use the Logger name to identify the source of the log message.

Mark


> 
> Thanks,
> Vijay G
> 
> On Thu, Jun 16, 2016 at 12:59 PM, Andr� Warnier (tomcat) <aw...@ice-sa.com>
> wrote:
> 
>>
>> Thanks. The rest below, as preferred on this mailing list.
>>
>>>
>>> Thanks,
>>> Vijay G
>>>
>>> On Thu, Jun 16, 2016 at 12:40 PM, Andr� Warnier (tomcat) <aw...@ice-sa.com>
>>> wrote:
>>>
>>> On 16.06.2016 08:50, Vijay Kumar wrote:
>>>>
>>>> Hi Team,
>>>>>
>>>>> We have a requirement to create a log either at User level or at User
>>>>> session level.
>>>>> Please provide your inputs on this.
>>>>>
>>>>> User level means a separate log to be created for that User and the same
>>>>> should be used always for writing the log.
>>>>> or
>>>>> There will be one log file and within that log there should be a context
>>>>> information to identify the user which we will do but want to know which
>>>>> approach we have to use
>>>>>
>>>>> Session level means, is it possible to turn the logger mode to INFO for
>>>>> a
>>>>> particular session and the log to be written in one of the file at
>>>>> server/client side?
>>>>>
>>>>> Our application is built with Struts 1.2.
>>>>> Webserver used is Tomcat.
>>>>> Currently using Tomcat JULI Logging.
>>>>>
>>>>>
>>>>> Tomcat version ?
>>>>
>>>>
>> On 16.06.2016 09:18, Vijay Kumar wrote:
>>> We are using Tomcat 7.0.33 and 7.0.62
>>>
>>> 7.0.33 when Customer is on Java 1.7
>>> 7.0.62 when our customer is on 1.8
>>>
>>> But we can upgrade to 8 if required to achieve the logging support
>>
>> I don't think that there is anything "standard" that will allow to create
>> user-specific logfiles.
>> What you want is more an application-level thing, so it would have to be
>> resolved at the application level.
>> You can create your own logger and do what you want. Any application
>> module can call getRemoteUser(), and use the result to insert it in all the
>> log messages that it issues.
>> Of course this will only work in code running within an application, and
>> only when there is an authenticated user.
>> To avoid a lot of overhead (also at the system administration level), I
>> would recommend to keep using the standard logfiles, and just insert a
>> user-id "marker" in the log messages of interest.  This standard logfile
>> can then be filtered a-posteriori by an external log-processing utility,
>> which can then generate any individual files that you want.  That is likely
>> to be a lot simpler to do than generating user-specific logfiles at the
>> Tomcat level, and also would have a lot less impact on performance.
>>
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>>
>>
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: how to create log files user level

Posted by Vijay Kumar <vi...@gmail.com>.
Hi Andre,

Thanks for the update.

Could you please give me some information whether it's possible or not to
generate user level log because i have tried using log4j but it failed.

Appreciate your help on this.

Thanks,
Vijay G

On Thu, Jun 16, 2016 at 12:59 PM, André Warnier (tomcat) <aw...@ice-sa.com>
wrote:

>
> Thanks. The rest below, as preferred on this mailing list.
>
>>
>> Thanks,
>> Vijay G
>>
>> On Thu, Jun 16, 2016 at 12:40 PM, André Warnier (tomcat) <aw...@ice-sa.com>
>> wrote:
>>
>> On 16.06.2016 08:50, Vijay Kumar wrote:
>>>
>>> Hi Team,
>>>>
>>>> We have a requirement to create a log either at User level or at User
>>>> session level.
>>>> Please provide your inputs on this.
>>>>
>>>> User level means a separate log to be created for that User and the same
>>>> should be used always for writing the log.
>>>> or
>>>> There will be one log file and within that log there should be a context
>>>> information to identify the user which we will do but want to know which
>>>> approach we have to use
>>>>
>>>> Session level means, is it possible to turn the logger mode to INFO for
>>>> a
>>>> particular session and the log to be written in one of the file at
>>>> server/client side?
>>>>
>>>> Our application is built with Struts 1.2.
>>>> Webserver used is Tomcat.
>>>> Currently using Tomcat JULI Logging.
>>>>
>>>>
>>>> Tomcat version ?
>>>
>>>
> On 16.06.2016 09:18, Vijay Kumar wrote:
> > We are using Tomcat 7.0.33 and 7.0.62
> >
> > 7.0.33 when Customer is on Java 1.7
> > 7.0.62 when our customer is on 1.8
> >
> > But we can upgrade to 8 if required to achieve the logging support
>
> I don't think that there is anything "standard" that will allow to create
> user-specific logfiles.
> What you want is more an application-level thing, so it would have to be
> resolved at the application level.
> You can create your own logger and do what you want. Any application
> module can call getRemoteUser(), and use the result to insert it in all the
> log messages that it issues.
> Of course this will only work in code running within an application, and
> only when there is an authenticated user.
> To avoid a lot of overhead (also at the system administration level), I
> would recommend to keep using the standard logfiles, and just insert a
> user-id "marker" in the log messages of interest.  This standard logfile
> can then be filtered a-posteriori by an external log-processing utility,
> which can then generate any individual files that you want.  That is likely
> to be a lot simpler to do than generating user-specific logfiles at the
> Tomcat level, and also would have a lot less impact on performance.
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>

Re: how to create log files user level

Posted by "André Warnier (tomcat)" <aw...@ice-sa.com>.
Thanks. The rest below, as preferred on this mailing list.
>
> Thanks,
> Vijay G
>
> On Thu, Jun 16, 2016 at 12:40 PM, Andr� Warnier (tomcat) <aw...@ice-sa.com>
> wrote:
>
>> On 16.06.2016 08:50, Vijay Kumar wrote:
>>
>>> Hi Team,
>>>
>>> We have a requirement to create a log either at User level or at User
>>> session level.
>>> Please provide your inputs on this.
>>>
>>> User level means a separate log to be created for that User and the same
>>> should be used always for writing the log.
>>> or
>>> There will be one log file and within that log there should be a context
>>> information to identify the user which we will do but want to know which
>>> approach we have to use
>>>
>>> Session level means, is it possible to turn the logger mode to INFO for a
>>> particular session and the log to be written in one of the file at
>>> server/client side?
>>>
>>> Our application is built with Struts 1.2.
>>> Webserver used is Tomcat.
>>> Currently using Tomcat JULI Logging.
>>>
>>>
>> Tomcat version ?
>>

On 16.06.2016 09:18, Vijay Kumar wrote:
 > We are using Tomcat 7.0.33 and 7.0.62
 >
 > 7.0.33 when Customer is on Java 1.7
 > 7.0.62 when our customer is on 1.8
 >
 > But we can upgrade to 8 if required to achieve the logging support

I don't think that there is anything "standard" that will allow to create user-specific 
logfiles.
What you want is more an application-level thing, so it would have to be resolved at the 
application level.
You can create your own logger and do what you want. Any application module can call 
getRemoteUser(), and use the result to insert it in all the log messages that it issues.
Of course this will only work in code running within an application, and only when there 
is an authenticated user.
To avoid a lot of overhead (also at the system administration level), I would recommend to 
keep using the standard logfiles, and just insert a user-id "marker" in the log messages 
of interest.  This standard logfile can then be filtered a-posteriori by an external 
log-processing utility, which can then generate any individual files that you want.  That 
is likely to be a lot simpler to do than generating user-specific logfiles at the Tomcat 
level, and also would have a lot less impact on performance.




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: how to create log files user level

Posted by Vijay Kumar <vi...@gmail.com>.
We are using Tomcat 7.0.33 and 7.0.62

7.0.33 when Customer is on Java 1.7
7.0.62 when our customer is on 1.8

But we can upgrade to 8 if required to achieve the logging support

Thanks,
Vijay G

On Thu, Jun 16, 2016 at 12:40 PM, André Warnier (tomcat) <aw...@ice-sa.com>
wrote:

> On 16.06.2016 08:50, Vijay Kumar wrote:
>
>> Hi Team,
>>
>> We have a requirement to create a log either at User level or at User
>> session level.
>> Please provide your inputs on this.
>>
>> User level means a separate log to be created for that User and the same
>> should be used always for writing the log.
>> or
>> There will be one log file and within that log there should be a context
>> information to identify the user which we will do but want to know which
>> approach we have to use
>>
>> Session level means, is it possible to turn the logger mode to INFO for a
>> particular session and the log to be written in one of the file at
>> server/client side?
>>
>> Our application is built with Struts 1.2.
>> Webserver used is Tomcat.
>> Currently using Tomcat JULI Logging.
>>
>>
> Tomcat version ?
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>

Re: how to create log files user level

Posted by "André Warnier (tomcat)" <aw...@ice-sa.com>.
On 16.06.2016 08:50, Vijay Kumar wrote:
> Hi Team,
>
> We have a requirement to create a log either at User level or at User
> session level.
> Please provide your inputs on this.
>
> User level means a separate log to be created for that User and the same
> should be used always for writing the log.
> or
> There will be one log file and within that log there should be a context
> information to identify the user which we will do but want to know which
> approach we have to use
>
> Session level means, is it possible to turn the logger mode to INFO for a
> particular session and the log to be written in one of the file at
> server/client side?
>
> Our application is built with Struts 1.2.
> Webserver used is Tomcat.
> Currently using Tomcat JULI Logging.
>

Tomcat version ?



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org