Masquer les données sensibles dans des journaux avec logback

J'ai besoin d'être en mesure de rechercher un événement pour un certain nombre de modèles et de remplacer le texte dans le dessin avec un masqués valeur. C'est une caractéristique de notre application destinée à éviter que des informations sensibles de tomber dans les journaux. Que l'information peut être à partir d'une grande variété de sources, il n'est pas possible d'appliquer des filtres sur toutes les entrées. Il y a d'ailleurs utilise pour toString() au-delà de connexion et je ne veux pas toString() de masque uniformément pour tous les appels (uniquement l'exploitation forestière).

J'ai essayé d'utiliser le %de remplacement de la méthode dans logback.xml:

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'f k\="pin">(.*?)&lt;/f','f k\="pin">**********&lt;/f'}%n</pattern>

Ce fut un succès (après le remplacement des crochets avec des entités de caractères), mais il ne peut remplacer un modèle unique. Je tiens également à effectuer l'équivalent de

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'pin=(.*?),','pin=**********,'}%n</pattern>

en même temps, mais ne le peuvent pas. Il n'y a aucun moyen de masque deux tendances en une %de les remplacer.

L'autre voie qui a été vaguement discuté sur le interblags est l'extension de quelque chose sur l'appender/codeur/mise en page de la hiérarchie, mais à chaque tentative d'intercepter le ILoggingEvent a entraîné un effondrement de l'ensemble du système, généralement par le biais de l'instanciation des erreurs ou des UnsupportedOperationException.

Par exemple, j'ai essayé l'extension de PatternLayout:

@Component("maskingPatternLayout")
public class MaskingPatternLayout extends PatternLayout {

    @Autowired
    private Environment env;

    @Override
    public String doLayout(ILoggingEvent event) {
        String message=super.doLayout(event);

        String patternsProperty = env.getProperty("bowdleriser.patterns");

        if( patternsProperty != null ) {
            String[] patterns = patternsProperty.split("|");
            for (int i = 0; i < patterns.length; i++ ) {
                Pattern pattern = Pattern.compile(patterns[i]);
                Matcher matcher = pattern.matcher(event.getMessage());
                matcher.replaceAll("*");
            }
        } else {
            System.out.println("Bowdleriser not cleaning! Naughty strings are getting through!");
        }

        return message;
    }
}

et puis en ajustant les logback.xml

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <layout class="com.touchcorp.touchpoint.utils.MaskingPatternLayout">
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </layout>
    </encoder>
  </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>logs/touchpoint.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>logs/touchpoint.%i.log.zip</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>3</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>10MB</maxFileSize>
        </triggeringPolicy>
      <encoder>
          <layout class="com.touchcorp.touchpoint.utils.MaskingPatternLayout">
            <pattern>%date{YYYY-MM-dd HH:mm:ss} %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
          </layout>
      </encoder>
    </appender>


  <logger name="com.touchcorp.touchpoint" level="DEBUG" />
  <logger name="org.springframework.web.servlet.mvc" level="TRACE" />

  <root level="INFO">
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

J'ai essayé beaucoup d'autres insertions, donc je me demandais si quelqu'un a réellement atteint ce que je cherche et si ils pourraient fournir des indices ou d'une solution.

OriginalL'auteur Michael Coxon | 2014-08-13