Log4j 2
  1. Log4j 2
  2. LOG4J2-17

Provide enhanced logger filtering support.

    Details

    • Type: New Feature New Feature
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.0-alpha1
    • Component/s: Core
    • Labels:
      None

      Description

      We wrote our own logging framework primarily because log4j didn't provide some of the features we needed. Our software runs on behalf of many companies, products and users all in the same JVM. We have a requirement to be able to enable logging based on some of these factors. For example, we might want to enable debug logging only for a specific company or even a specific user. All our requests store attributes, such as the companyId, product name and userid in the MDC.

      So the real requirement here is to be able to filter log records early based on more information than just the log level. For example, our requirement could be met by a filter that could be configured to associate a log level with a company id. Then when debug is called a check would first be done to see if debug was enabled for that company id and then whether debug was enabled for that logger. These checks cannot be done as filters on Appenders as the performance of the system is dramatically impacted as isDebugLogging really needs to return false for all company ids other than the one that is enabled.

      This feature is similar to LogBack's TurboFilter, except I would like it implemented differently. I would recommend that the filter be specified globally but referenced on each logger to which it applies, much as the specification of Appenders is done.

        Activity

        Hide
        Scott Deboy added a comment -

        It sounds like ExpressionFilter logic could be repurposed to support this capability.

        Show
        Scott Deboy added a comment - It sounds like ExpressionFilter logic could be repurposed to support this capability.
        Hide
        Ralph Goers added a comment -

        In my experimental branch I have enhanced Filters so that they can be configured globally as well as on a logger in addition to on an appender. The branch contains a couple of example filters.

        Show
        Ralph Goers added a comment - In my experimental branch I have enhanced Filters so that they can be configured globally as well as on a logger in addition to on an appender. The branch contains a couple of example filters.
        Hide
        Ralph Goers added a comment -

        I should have added that, like Logback's TurboFilters, the filters need to be at a global level, on the logger, or both. Filters on Appenders would require too much configuration, would be fragile and would not perform well at all. Events that don't match the filtering criteria must be rejected asap.

        Show
        Ralph Goers added a comment - I should have added that, like Logback's TurboFilters, the filters need to be at a global level, on the logger, or both. Filters on Appenders would require too much configuration, would be fragile and would not perform well at all. Events that don't match the filtering criteria must be rejected asap.
        Hide
        Ralph Goers added a comment -

        Filters have been implemented. I have considered implementing Evaluators as Logback does but I don't see the value over just using either a Filter or a Lookup.

        Show
        Ralph Goers added a comment - Filters have been implemented. I have considered implementing Evaluators as Logback does but I don't see the value over just using either a Filter or a Lookup.

          People

          • Assignee:
            Ralph Goers
            Reporter:
            Ralph Goers
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development