11/*
2- * Copyright 2012-2016 the original author or authors.
2+ * Copyright 2012-2017 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.
2424import ch .qos .logback .classic .spi .ILoggingEvent ;
2525import ch .qos .logback .core .Appender ;
2626import ch .qos .logback .core .ConsoleAppender ;
27+ import ch .qos .logback .core .OutputStreamAppender ;
28+ import ch .qos .logback .core .filter .Filter ;
2729import ch .qos .logback .core .rolling .FixedWindowRollingPolicy ;
2830import ch .qos .logback .core .rolling .RollingFileAppender ;
2931import ch .qos .logback .core .rolling .SizeBasedTriggeringPolicy ;
4446 * and {@code file-appender.xml} files provided for classic {@code logback.xml} use.
4547 *
4648 * @author Phillip Webb
49+ * @author Vedran Pavic
4750 * @since 1.1.2
4851 */
4952class DefaultLogbackConfiguration {
@@ -58,13 +61,13 @@ class DefaultLogbackConfiguration {
5861
5962 private static final Charset UTF8 = Charset .forName ("UTF-8" );
6063
61- private final PropertyResolver patterns ;
64+ private final PropertyResolver resolver ;
6265
6366 private final LogFile logFile ;
6467
6568 DefaultLogbackConfiguration (LoggingInitializationContext initializationContext ,
6669 LogFile logFile ) {
67- this .patterns = getPatternsResolver (initializationContext .getEnvironment ());
70+ this .resolver = getPatternsResolver (initializationContext .getEnvironment ());
6871 this .logFile = logFile ;
6972 }
7073
@@ -73,7 +76,7 @@ private PropertyResolver getPatternsResolver(Environment environment) {
7376 return new PropertySourcesPropertyResolver (null );
7477 }
7578 return RelaxedPropertyResolver .ignoringUnresolvableNestedPlaceholders (environment ,
76- "logging.pattern. " );
79+ "logging." );
7780 }
7881
7982 public void apply (LogbackConfigurator config ) {
@@ -114,26 +117,38 @@ private void base(LogbackConfigurator config) {
114117 private Appender <ILoggingEvent > consoleAppender (LogbackConfigurator config ) {
115118 ConsoleAppender <ILoggingEvent > appender = new ConsoleAppender <ILoggingEvent >();
116119 PatternLayoutEncoder encoder = new PatternLayoutEncoder ();
117- String logPattern = this .patterns .getProperty ("console" , CONSOLE_LOG_PATTERN );
120+ String logPattern = this .resolver .getProperty ("pattern.console" ,
121+ CONSOLE_LOG_PATTERN );
118122 encoder .setPattern (OptionHelper .substVars (logPattern , config .getContext ()));
119123 encoder .setCharset (UTF8 );
120124 config .start (encoder );
121125 appender .setEncoder (encoder );
126+ String [] filterClasses = this .resolver .getProperty ("filters.console" ,
127+ String [].class );
128+ if (filterClasses != null ) {
129+ configureFilters (config , appender , filterClasses );
130+ }
122131 config .appender ("CONSOLE" , appender );
123132 return appender ;
124133 }
125134
126135 private Appender <ILoggingEvent > fileAppender (LogbackConfigurator config ,
127136 String logFile ) {
128- RollingFileAppender <ILoggingEvent > appender = new RollingFileAppender <ILoggingEvent >();
137+ RollingFileAppender <ILoggingEvent > appender =
138+ new RollingFileAppender <ILoggingEvent >();
129139 PatternLayoutEncoder encoder = new PatternLayoutEncoder ();
130- String logPattern = this .patterns .getProperty ("file" , FILE_LOG_PATTERN );
140+ String logPattern = this .resolver .getProperty ("pattern. file" , FILE_LOG_PATTERN );
131141 encoder .setPattern (OptionHelper .substVars (logPattern , config .getContext ()));
132142 appender .setEncoder (encoder );
133143 config .start (encoder );
134144 appender .setFile (logFile );
135145 setRollingPolicy (appender , config , logFile );
136146 setMaxFileSize (appender , config );
147+ String [] filterClasses = this .resolver .getProperty ("filters.file" ,
148+ String [].class );
149+ if (filterClasses != null ) {
150+ configureFilters (config , appender , filterClasses );
151+ }
137152 config .appender ("FILE" , appender );
138153 return appender ;
139154 }
@@ -163,4 +178,20 @@ private void setMaxFileSize(RollingFileAppender<ILoggingEvent> appender,
163178 config .start (triggeringPolicy );
164179 }
165180
181+ @ SuppressWarnings ("unchecked" )
182+ private void configureFilters (LogbackConfigurator config ,
183+ OutputStreamAppender appender , String [] filterClasses ) {
184+ for (String filterClass : filterClasses ) {
185+ try {
186+ Filter filter = (Filter ) Class .forName (filterClass ).newInstance ();
187+ config .start (filter );
188+ appender .addFilter (filter );
189+ }
190+ catch (Exception e ) {
191+ throw new IllegalStateException ("Unable to configure " + filterClass +
192+ " logging filter" );
193+ }
194+ }
195+ }
196+
166197}
0 commit comments