11/*
2- * Copyright 2012-2015 the original author or authors.
2+ * Copyright 2012-2016 the original author or authors.
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
2323import ch .qos .logback .classic .spi .ILoggingEvent ;
2424import ch .qos .logback .core .Appender ;
2525import ch .qos .logback .core .ConsoleAppender ;
26+ import ch .qos .logback .core .OutputStreamAppender ;
27+ import ch .qos .logback .core .filter .Filter ;
2628import ch .qos .logback .core .rolling .FixedWindowRollingPolicy ;
2729import ch .qos .logback .core .rolling .RollingFileAppender ;
2830import ch .qos .logback .core .rolling .SizeBasedTriggeringPolicy ;
4143 * and {@code file-appender.xml} files provided for classic {@code logback.xml} use.
4244 *
4345 * @author Phillip Webb
46+ * @author Vedran Pavic
4447 * @since 1.1.2
4548 */
4649class DefaultLogbackConfiguration {
@@ -55,21 +58,21 @@ class DefaultLogbackConfiguration {
5558
5659 private static final Charset UTF8 = Charset .forName ("UTF-8" );
5760
58- private final PropertyResolver patterns ;
61+ private final PropertyResolver resolver ;
5962
6063 private final LogFile logFile ;
6164
6265 DefaultLogbackConfiguration (LoggingInitializationContext initializationContext ,
6366 LogFile logFile ) {
64- this .patterns = getPatternsResolver (initializationContext .getEnvironment ());
67+ this .resolver = getPatternsResolver (initializationContext .getEnvironment ());
6568 this .logFile = logFile ;
6669 }
6770
6871 private PropertyResolver getPatternsResolver (Environment environment ) {
6972 if (environment == null ) {
7073 return new PropertySourcesPropertyResolver (null );
7174 }
72- return new RelaxedPropertyResolver (environment , "logging.pattern. " );
75+ return new RelaxedPropertyResolver (environment , "logging." );
7376 }
7477
7578 public void apply (LogbackConfigurator config ) {
@@ -115,20 +118,29 @@ private void base(LogbackConfigurator config) {
115118 private Appender <ILoggingEvent > consoleAppender (LogbackConfigurator config ) {
116119 ConsoleAppender <ILoggingEvent > appender = new ConsoleAppender <ILoggingEvent >();
117120 PatternLayoutEncoder encoder = new PatternLayoutEncoder ();
118- String logPattern = this .patterns .getProperty ("console" , CONSOLE_LOG_PATTERN );
121+ String logPattern = this .resolver .getProperty ("pattern.console" ,
122+ CONSOLE_LOG_PATTERN );
119123 encoder .setPattern (OptionHelper .substVars (logPattern , config .getContext ()));
120124 encoder .setCharset (UTF8 );
121125 config .start (encoder );
122126 appender .setEncoder (encoder );
127+
128+ String [] filterClasses = this .resolver .getProperty ("filters.console" ,
129+ String [].class );
130+ if (filterClasses != null ) {
131+ configureFilters (config , appender , filterClasses );
132+ }
133+
123134 config .appender ("CONSOLE" , appender );
124135 return appender ;
125136 }
126137
127138 private Appender <ILoggingEvent > fileAppender (LogbackConfigurator config ,
128139 String logFile ) {
129- RollingFileAppender <ILoggingEvent > appender = new RollingFileAppender <ILoggingEvent >();
140+ RollingFileAppender <ILoggingEvent > appender =
141+ new RollingFileAppender <ILoggingEvent >();
130142 PatternLayoutEncoder encoder = new PatternLayoutEncoder ();
131- String logPattern = this .patterns .getProperty ("file" , FILE_LOG_PATTERN );
143+ String logPattern = this .resolver .getProperty ("pattern. file" , FILE_LOG_PATTERN );
132144 encoder .setPattern (OptionHelper .substVars (logPattern , config .getContext ()));
133145 appender .setEncoder (encoder );
134146 config .start (encoder );
@@ -141,13 +153,36 @@ private Appender<ILoggingEvent> fileAppender(LogbackConfigurator config,
141153 rollingPolicy .setParent (appender );
142154 config .start (rollingPolicy );
143155
144- SizeBasedTriggeringPolicy <ILoggingEvent > triggeringPolicy = new SizeBasedTriggeringPolicy <ILoggingEvent >();
156+ SizeBasedTriggeringPolicy <ILoggingEvent > triggeringPolicy =
157+ new SizeBasedTriggeringPolicy <ILoggingEvent >();
145158 triggeringPolicy .setMaxFileSize ("10MB" );
146159 appender .setTriggeringPolicy (triggeringPolicy );
147160 config .start (triggeringPolicy );
148161
162+ String [] filterClasses = this .resolver .getProperty ("filters.file" ,
163+ String [].class );
164+ if (filterClasses != null ) {
165+ configureFilters (config , appender , filterClasses );
166+ }
167+
149168 config .appender ("FILE" , appender );
150169 return appender ;
151170 }
152171
172+ @ SuppressWarnings ("unchecked" )
173+ private void configureFilters (LogbackConfigurator config ,
174+ OutputStreamAppender appender , String [] filterClasses ) {
175+ for (String filterClass : filterClasses ) {
176+ try {
177+ Filter filter = (Filter ) Class .forName (filterClass ).newInstance ();
178+ config .start (filter );
179+ appender .addFilter (filter );
180+ }
181+ catch (Exception e ) {
182+ throw new IllegalStateException ("Unable to configure " + filterClass +
183+ " logging filter" );
184+ }
185+ }
186+ }
187+
153188}
0 commit comments