logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ralph Goers <ralph.go...@dslextreme.com>
Subject Re: Improving log4j so it can easily be used with servlet logging
Date Mon, 31 May 2010 22:15:37 GMT

On May 31, 2010, at 1:43 PM, Thorbjørn Ravn Andersen wrote:

> Den 30/05/10 21.34, Ralph Goers skrev:
>> Wouldn't it make more sense for the LoggerContext to have a reference to the ServletContext?
The Appender could then do
>> if (getContext().getServletContext() != null) {
>>   getContext().getServletContext().log(event.getFormattedMessage());
>> }
> I do not know.  I am unfamiliar with what the LoggerContext provides.  Are you suggesting
that for each and every possible sub-context you will provide a field in the LoggerContext?

No. It would probably make more sense to do what JSF does when it is running in a Portal:

Object obj = getContext().getExternalContext();

if (obj != null && obj instanceof ServletContext) {
	((ServletContext) obj).log(event.getFormattedMessage());

One could also do:

if (getContext() instanceof LoggerServletContext) {
	((LoggerServletContext) getContext()).getContext().log(event.getFormattedMessage());

in which case LoggerServletContext would extend LoggerContext and provide the field.

>> Note that if the servlet adds its name to the MDC then all log records will have
this available.  
>> To be honest though, I would have expected the desire would be to have the ServletContext's
log methods route to Log4j, not the other way around.
> The reason is simple.  There is no guarantee that any J2EE container can or will allow
access to the filesystem.  Using the servlet log-method is the _ONLY_ well-defined way to
log things inside a J2EE container without needing to make assumptions and manual configurations
(remember the container doesn't help).
> Possible assumptions may be:
> * I can access the file system.
> * Current working directory can be used (for writing or starting navigation)
> * The JVM provides environment variable which can be used to locate the user.home of
the operating system user running the JVM.
> * The JVM is allowed to write in user.home.
> I like debug logs placed in the filesystem, but I also like to be able to send log messages
to the standard log mechanism.  The latter I cannot do right now.

OK. But just because you can't write to the FileSystem doesn't mean that writing via the ServletContext's
log method is your only option. You can write to a database, syslog, SNMP, SMTP, etc. But
yes, some configuration would be required to make that happen. Writing to the containers log
file is sub-optimal in a lot of cases for various reasons such as; a) writing debug logs to
the local file system can be a security risk, and b) multiple webapps may end up in a co-mingled
log file.  While I understand your use case it is just one I would rarely, if ever, recommend.


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

View raw message