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. Ralph --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-dev-h...@logging.apache.org