Log4j 2
  1. Log4j 2
  2. LOG4J2-42

Improving log4j so it can easily be used with servlet logging

    Details

    • Type: Wish Wish
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: API
    • Labels:
      None

      Description

      On May 30, 2010, at 11:49 AM, Thorbjørn Ravn Andersen wrote:

      There is one more thing that I would really like to see in log4j 2.0, namely the ability for a servlet to log to a servlet container using log4j (and in slf4j too but that is a different story). Currently that cannot be done, because there is no way for the code asking for the logger to pass a "this" reference to the logging framework.

      I would suggest that in log4j 2.0 the LoggerManager.getLogger() signature is changed to accept the class (as now), and a varargs of Objects. The objects are passed to the appender when needing to do the actual logging, allowing a ServletLoggerAppender to look for any object extending GenericServlet and invoke its log method.

      For client code it would mean that the logger object was retreived similar to:

      Logger log = Logger.getLogger(this.getClass(), this);

      We might even consider making the rule in log4j 2.0 that "the name of the logger is the full name of the class of the first object"[2]. In that case we could make do with:

      Logger log = Logger.getLogger(this);

      This would most likely also result in much other code being cleaner by allowing to drop the "getClass()" clause.

      What do you think?

      [1] http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/GenericServlet.html#log%28java.lang.String%29

      [2] For backwards compatability instances of Class should be treated slightly different


      Thorbjørn Ravn Andersen "...plus... Tubular Bells!"

      The follows at http://thread.gmane.org/gmane.comp.jakarta.log4j.devel/15576

        Activity

        Hide
        Ralph Goers added a comment -

        LogManager.getLogger() passes the FQCN of the LogManager and thus determines the class that invoked it. ClassLoaderContextSelector uses this information to associate the Logger instance with the LoggerContext associated with the caller's ClassLoader. Unfortunately, the class itself isn't stored currently.

        Show
        Ralph Goers added a comment - LogManager.getLogger() passes the FQCN of the LogManager and thus determines the class that invoked it. ClassLoaderContextSelector uses this information to associate the Logger instance with the LoggerContext associated with the caller's ClassLoader. Unfortunately, the class itself isn't stored currently.

          People

          • Assignee:
            Unassigned
            Reporter:
            Curt Arnold
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:

              Development