One option is to create a custom Log4j2 Filter. Your custom Filter would only 
be "active" if it detects it's in the correct environment, otherwise it would 
return NEUTRAL from all `filter(...)` methods. 

CompositeFilter is final so you can't subclass it but perhaps you can create a 
wrapper instead. 

Here is a link to the manual page that explains how to implement Log4j2 
plugins: http://logging.apache.org/log4j/2.x/manual/plugins.html
This section is specifically about implementing custom filters: 
http://logging.apache.org/log4j/2.x/manual/extending.html#Filters

You probably want to subclass AbstractFilter rather than implementing the 
Filter interface from scratch:
https://github.com/apache/logging-log4j2/blob/master/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/AbstractFilter.java


Sent from my iPhone

> On Feb 27, 2017, at 21:00, Mahler, Stefan <stefan.mah...@icongmbh.de> wrote:
> 
> Hello,
> 
> we want replace our legacy proprietary logging framework.
> 
> One important feature of our current logging framework is the so called 
> 'profile controlled filtering'.
> There exist different filtering profiles like 'production', 'test' or 
> 'development'. The profile to use
> is selected by a system property named 'STAGE'.
> Each filtering profile has its filter combination:
> * production: Log level is ERROR or higher, except, if marker is HEARTBEAT, 
> then the log level should be INFO or higher.
> * test: Log level is WARNING or higher, except if marker is one of 
> [HEARTBEAT, DB], then the log level is DEBUG or higher.
> * development: Log level is INFO, except if marker is one of [HEARTBEAT, DB, 
> ENTRY].
> Additionally there is a default filter combination. Default filter 
> combination is used if STAGE is unknown or no STAGE is defined.
> 
> A single filter combination can be defined with CompositeFilter. E.g. for the 
> production profile the follow CompositeFilter can be used:
>      <Filters>
>        <ThresholdFilter level="INFO" onMatch="NEUTRAL" onMismatch="DENY" />
>        <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="NEUTRAL" />
>        <MarkerFilter marker="HEARTBEAT" onMatch="ACCEPT" onMismatch="DENY" />
>      </Filters>
> 
> 
> But how can I select the profile (this means here the CompositeFilter) by 
> System-Lookup?
> Is there any recommended way for profile controlling?
> 
> For all profiles the same appenders are used. The only difference is the 
> filter combination.
> 
> Thanks a lot!
> Stefan Mahler
> 
> 
> 
> --
> Stefan Mahler                           http://www.icongmbh.de
> Application Development
> icon Systemhaus GmbH            Tel. +49 711 806098-167
> Hauptstätter Straße 70
> 70178 Stuttgart                         Fax. +49 711 806098-299
> 
> 
> Geschäftsführer: Uwe Seltmann, Andreas Schwegler
> HRB Stuttgart 17655
> USt-IdNr.: DE 811944121
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
> For additional commands, e-mail: log4j-user-h...@logging.apache.org
> 

Reply via email to