Skip to content

Commit 49f0638

Browse files
committed
rename getDefaultConverterMap as getDefaultConverterSupplierMap, add getDefaultConverterMap method returning Map<String, String> to ensure backward compatibility
Signed-off-by: Ceki Gulcu <[email protected]>
1 parent 9201136 commit 49f0638

File tree

9 files changed

+212
-92
lines changed

9 files changed

+212
-92
lines changed

Diff for: logback-classic/src/main/java/ch/qos/logback/classic/PatternLayout.java

+92-74
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import ch.qos.logback.classic.pattern.color.HighlightingCompositeConverter;
2222
import ch.qos.logback.classic.spi.ILoggingEvent;
2323
import ch.qos.logback.core.CoreConstants;
24-
import ch.qos.logback.core.pattern.Converter;
2524
import ch.qos.logback.core.pattern.DynamicConverter;
2625
import ch.qos.logback.core.pattern.PatternLayoutBase;
2726
import ch.qos.logback.core.pattern.color.*;
@@ -41,137 +40,156 @@
4140

4241
public class PatternLayout extends PatternLayoutBase<ILoggingEvent> {
4342

44-
public static final Map<String, Supplier<DynamicConverter>> DEFAULT_CONVERTER_MAP = new HashMap<>();
43+
public static final Map<String, Supplier<DynamicConverter>> DEFAULT_CONVERTER_SUPPLIER_MAP = new HashMap<>();
44+
45+
public static final Map<String, String> DEFAULT_CONVERTER_MAP = new HashMap<>();
4546
public static final Map<String, String> CONVERTER_CLASS_TO_KEY_MAP = new HashMap<String, String>();
4647

4748
/**
4849
* @deprecated replaced by DEFAULT_CONVERTER_MAP
4950
*/
50-
public static final Map<String, Supplier<DynamicConverter>> defaultConverterMap = DEFAULT_CONVERTER_MAP;
51+
@Deprecated
52+
public static final Map<String, String> defaultConverterMap = DEFAULT_CONVERTER_MAP;
5153

5254
public static final String HEADER_PREFIX = "#logback.classic pattern: ";
5355

5456
static {
55-
DEFAULT_CONVERTER_MAP.putAll(Parser.DEFAULT_COMPOSITE_CONVERTER_MAP);
57+
DEFAULT_CONVERTER_SUPPLIER_MAP.putAll(Parser.DEFAULT_COMPOSITE_CONVERTER_MAP);
5658

57-
DEFAULT_CONVERTER_MAP.put("d", DateConverter::new);
58-
DEFAULT_CONVERTER_MAP.put("date", DateConverter::new);
59+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("d", DateConverter::new);
60+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("date", DateConverter::new);
5961
// used by PrefixComposite converter
6062
CONVERTER_CLASS_TO_KEY_MAP.put(DateConverter.class.getName(), "date");
6163

62-
DEFAULT_CONVERTER_MAP.put("ms", MicrosecondConverter::new);
63-
DEFAULT_CONVERTER_MAP.put("micros", MicrosecondConverter::new);
64+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("ms", MicrosecondConverter::new);
65+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("micros", MicrosecondConverter::new);
6466
CONVERTER_CLASS_TO_KEY_MAP.put(MicrosecondConverter.class.getName(), "micros");
6567

66-
DEFAULT_CONVERTER_MAP.put("r", RelativeTimeConverter::new);
67-
DEFAULT_CONVERTER_MAP.put("relative", RelativeTimeConverter::new);
68+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("r", RelativeTimeConverter::new);
69+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("relative", RelativeTimeConverter::new);
6870
CONVERTER_CLASS_TO_KEY_MAP.put(RelativeTimeConverter.class.getName(), "relative");
6971

70-
DEFAULT_CONVERTER_MAP.put("level", LevelConverter::new);
71-
DEFAULT_CONVERTER_MAP.put("le", LevelConverter::new);
72-
DEFAULT_CONVERTER_MAP.put("p", LevelConverter::new);
72+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("level", LevelConverter::new);
73+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("le", LevelConverter::new);
74+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("p", LevelConverter::new);
7375
CONVERTER_CLASS_TO_KEY_MAP.put(LevelConverter.class.getName(), "level");
7476

75-
DEFAULT_CONVERTER_MAP.put("t", ThreadConverter::new);
76-
DEFAULT_CONVERTER_MAP.put("thread", ThreadConverter::new);
77+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("t", ThreadConverter::new);
78+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("thread", ThreadConverter::new);
7779
CONVERTER_CLASS_TO_KEY_MAP.put(ThreadConverter.class.getName(), "thread");
7880

79-
DEFAULT_CONVERTER_MAP.put("lo", LoggerConverter::new);
80-
DEFAULT_CONVERTER_MAP.put("logger", LoggerConverter::new);
81-
DEFAULT_CONVERTER_MAP.put("c", LoggerConverter::new);
81+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("lo", LoggerConverter::new);
82+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("logger", LoggerConverter::new);
83+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("c", LoggerConverter::new);
8284
CONVERTER_CLASS_TO_KEY_MAP.put(LoggerConverter.class.getName(), "logger");
8385

84-
DEFAULT_CONVERTER_MAP.put("m", MessageConverter::new);
85-
DEFAULT_CONVERTER_MAP.put("msg", MessageConverter::new);
86-
DEFAULT_CONVERTER_MAP.put("message", MessageConverter::new);
86+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("m", MessageConverter::new);
87+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("msg", MessageConverter::new);
88+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("message", MessageConverter::new);
8789
CONVERTER_CLASS_TO_KEY_MAP.put(MessageConverter.class.getName(), "message");
8890

89-
DEFAULT_CONVERTER_MAP.put("C", ClassOfCallerConverter::new);
90-
DEFAULT_CONVERTER_MAP.put("class", ClassOfCallerConverter::new);
91+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("C", ClassOfCallerConverter::new);
92+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("class", ClassOfCallerConverter::new);
9193
CONVERTER_CLASS_TO_KEY_MAP.put(ClassOfCallerConverter.class.getName(), "class");
9294

93-
DEFAULT_CONVERTER_MAP.put("M", MethodOfCallerConverter::new);
94-
DEFAULT_CONVERTER_MAP.put("method", MethodOfCallerConverter::new);
95+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("M", MethodOfCallerConverter::new);
96+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("method", MethodOfCallerConverter::new);
9597
CONVERTER_CLASS_TO_KEY_MAP.put(MethodOfCallerConverter.class.getName(), "method");
9698

97-
DEFAULT_CONVERTER_MAP.put("L", LineOfCallerConverter::new);
98-
DEFAULT_CONVERTER_MAP.put("line", LineOfCallerConverter::new);
99+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("L", LineOfCallerConverter::new);
100+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("line", LineOfCallerConverter::new);
99101
CONVERTER_CLASS_TO_KEY_MAP.put(LineOfCallerConverter.class.getName(), "line");
100102

101-
DEFAULT_CONVERTER_MAP.put("F", FileOfCallerConverter::new);
102-
DEFAULT_CONVERTER_MAP.put("file", FileOfCallerConverter::new);
103+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("F", FileOfCallerConverter::new);
104+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("file", FileOfCallerConverter::new);
103105
CONVERTER_CLASS_TO_KEY_MAP.put(FileOfCallerConverter.class.getName(), "file");
104106

105-
DEFAULT_CONVERTER_MAP.put("X", MDCConverter::new);
106-
DEFAULT_CONVERTER_MAP.put("mdc", MDCConverter::new);
107+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("X", MDCConverter::new);
108+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("mdc", MDCConverter::new);
107109

108-
DEFAULT_CONVERTER_MAP.put("ex", ThrowableProxyConverter::new);
109-
DEFAULT_CONVERTER_MAP.put("exception", ThrowableProxyConverter::new);
110-
DEFAULT_CONVERTER_MAP.put("rEx", RootCauseFirstThrowableProxyConverter::new);
111-
DEFAULT_CONVERTER_MAP.put("rootException", RootCauseFirstThrowableProxyConverter::new);
112-
DEFAULT_CONVERTER_MAP.put("throwable", ThrowableProxyConverter::new);
110+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("ex", ThrowableProxyConverter::new);
111+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("exception", ThrowableProxyConverter::new);
112+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("rEx", RootCauseFirstThrowableProxyConverter::new);
113+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("rootException", RootCauseFirstThrowableProxyConverter::new);
114+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("throwable", ThrowableProxyConverter::new);
113115

114-
DEFAULT_CONVERTER_MAP.put("xEx", ExtendedThrowableProxyConverter::new);
115-
DEFAULT_CONVERTER_MAP.put("xException", ExtendedThrowableProxyConverter::new);
116-
DEFAULT_CONVERTER_MAP.put("xThrowable", ExtendedThrowableProxyConverter::new);
116+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("xEx", ExtendedThrowableProxyConverter::new);
117+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("xException", ExtendedThrowableProxyConverter::new);
118+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("xThrowable", ExtendedThrowableProxyConverter::new);
117119

118-
DEFAULT_CONVERTER_MAP.put("nopex", NopThrowableInformationConverter::new);
119-
DEFAULT_CONVERTER_MAP.put("nopexception", NopThrowableInformationConverter::new);
120+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("nopex", NopThrowableInformationConverter::new);
121+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("nopexception", NopThrowableInformationConverter::new);
120122

121-
DEFAULT_CONVERTER_MAP.put("cn", ContextNameConverter::new);
122-
DEFAULT_CONVERTER_MAP.put("contextName", ContextNameConverter::new);
123+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("cn", ContextNameConverter::new);
124+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("contextName", ContextNameConverter::new);
123125
CONVERTER_CLASS_TO_KEY_MAP.put(ContextNameConverter.class.getName(), "contextName");
124126

125-
DEFAULT_CONVERTER_MAP.put("caller", CallerDataConverter::new);
127+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("caller", CallerDataConverter::new);
126128
CONVERTER_CLASS_TO_KEY_MAP.put(CallerDataConverter.class.getName(), "caller");
127129

128-
DEFAULT_CONVERTER_MAP.put("marker", MarkerConverter::new);
130+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("marker", MarkerConverter::new);
129131
CONVERTER_CLASS_TO_KEY_MAP.put(MarkerConverter.class.getName(), "marker");
130132

131-
DEFAULT_CONVERTER_MAP.put("kvp", KeyValuePairConverter::new);
133+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("kvp", KeyValuePairConverter::new);
132134
CONVERTER_CLASS_TO_KEY_MAP.put(KeyValuePairConverter.class.getName(), "kvp");
133135

134-
DEFAULT_CONVERTER_MAP.put("maskedKvp", MaskedKeyValuePairConverter::new);
136+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("maskedKvp", MaskedKeyValuePairConverter::new);
135137
CONVERTER_CLASS_TO_KEY_MAP.put(MaskedKeyValuePairConverter.class.getName(), "maskedKvp");
136138

137-
DEFAULT_CONVERTER_MAP.put("property", PropertyConverter::new);
138-
139-
DEFAULT_CONVERTER_MAP.put("n", LineSeparatorConverter::new);
140-
141-
DEFAULT_CONVERTER_MAP.put("black", BlackCompositeConverter::new);
142-
DEFAULT_CONVERTER_MAP.put("red", RedCompositeConverter::new);
143-
DEFAULT_CONVERTER_MAP.put("green", GreenCompositeConverter::new);
144-
DEFAULT_CONVERTER_MAP.put("yellow", YellowCompositeConverter::new);
145-
DEFAULT_CONVERTER_MAP.put("blue", BlueCompositeConverter::new);
146-
DEFAULT_CONVERTER_MAP.put("magenta", MagentaCompositeConverter::new);
147-
DEFAULT_CONVERTER_MAP.put("cyan", CyanCompositeConverter::new);
148-
DEFAULT_CONVERTER_MAP.put("white", WhiteCompositeConverter::new);
149-
DEFAULT_CONVERTER_MAP.put("gray", GrayCompositeConverter::new);
150-
DEFAULT_CONVERTER_MAP.put("boldRed", BoldRedCompositeConverter::new);
151-
DEFAULT_CONVERTER_MAP.put("boldGreen", BoldGreenCompositeConverter::new);
152-
DEFAULT_CONVERTER_MAP.put("boldYellow", BoldYellowCompositeConverter::new);
153-
DEFAULT_CONVERTER_MAP.put("boldBlue", BoldBlueCompositeConverter::new);
154-
DEFAULT_CONVERTER_MAP.put("boldMagenta", BoldMagentaCompositeConverter::new);
155-
DEFAULT_CONVERTER_MAP.put("boldCyan", BoldCyanCompositeConverter::new);
156-
DEFAULT_CONVERTER_MAP.put("boldWhite", BoldWhiteCompositeConverter::new);
157-
DEFAULT_CONVERTER_MAP.put("highlight", HighlightingCompositeConverter::new);
158-
159-
DEFAULT_CONVERTER_MAP.put("lsn", LocalSequenceNumberConverter::new);
139+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("property", PropertyConverter::new);
140+
141+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("n", LineSeparatorConverter::new);
142+
143+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("black", BlackCompositeConverter::new);
144+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("red", RedCompositeConverter::new);
145+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("green", GreenCompositeConverter::new);
146+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("yellow", YellowCompositeConverter::new);
147+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("blue", BlueCompositeConverter::new);
148+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("magenta", MagentaCompositeConverter::new);
149+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("cyan", CyanCompositeConverter::new);
150+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("white", WhiteCompositeConverter::new);
151+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("gray", GrayCompositeConverter::new);
152+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("boldRed", BoldRedCompositeConverter::new);
153+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("boldGreen", BoldGreenCompositeConverter::new);
154+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("boldYellow", BoldYellowCompositeConverter::new);
155+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("boldBlue", BoldBlueCompositeConverter::new);
156+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("boldMagenta", BoldMagentaCompositeConverter::new);
157+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("boldCyan", BoldCyanCompositeConverter::new);
158+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("boldWhite", BoldWhiteCompositeConverter::new);
159+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("highlight", HighlightingCompositeConverter::new);
160+
161+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("lsn", LocalSequenceNumberConverter::new);
160162
CONVERTER_CLASS_TO_KEY_MAP.put(LocalSequenceNumberConverter.class.getName(), "lsn");
161163

162-
DEFAULT_CONVERTER_MAP.put("sn", SequenceNumberConverter::new);
163-
DEFAULT_CONVERTER_MAP.put("sequenceNumber", SequenceNumberConverter::new);
164+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("sn", SequenceNumberConverter::new);
165+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("sequenceNumber", SequenceNumberConverter::new);
164166
CONVERTER_CLASS_TO_KEY_MAP.put(SequenceNumberConverter.class.getName(), "sequenceNumber");
165167

166-
DEFAULT_CONVERTER_MAP.put("prefix", PrefixCompositeConverter::new);
168+
DEFAULT_CONVERTER_SUPPLIER_MAP.put("prefix", PrefixCompositeConverter::new);
167169

168170
}
169171

170172
public PatternLayout() {
171173
this.postCompileProcessor = new EnsureExceptionHandling();
172174
}
173175

174-
public Map<String, Supplier<DynamicConverter>> getDefaultConverterMap() {
176+
public Map<String, Supplier<DynamicConverter>> getDefaultConverterSupplierMap() {
177+
return DEFAULT_CONVERTER_SUPPLIER_MAP;
178+
}
179+
180+
/**
181+
* <p>BEWARE: The map of type String,String for mapping conversion words is deprecated.
182+
* Use {@link #getDefaultConverterSupplierMap()} instead.</p>
183+
*
184+
* <p>Existing code such as getDefaultMap().put("k", X.class.getName()) should be replaced by
185+
* getDefaultConverterSupplierMap().put("k", X::new) </p>
186+
*
187+
* <p>Note that values in the map will still be taken into account and processed correctly.</p>
188+
*
189+
* @return a map of keys and class names
190+
*/
191+
@Deprecated
192+
public Map<String, String> getDefaultConverterMap() {
175193
return DEFAULT_CONVERTER_MAP;
176194
}
177195

Diff for: logback-classic/src/main/java/ch/qos/logback/classic/html/HTMLLayout.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,9 @@ public void start() {
7373
}
7474
}
7575

76-
protected Map<String, Supplier<DynamicConverter>> getDefaultConverterMap() {
77-
return PatternLayout.DEFAULT_CONVERTER_MAP;
76+
@Override
77+
protected Map<String, Supplier<DynamicConverter>> getDefaultConverterSupplierMap() {
78+
return PatternLayout.DEFAULT_CONVERTER_SUPPLIER_MAP;
7879
}
7980

8081
public String doLayout(ILoggingEvent event) {

Diff for: logback-classic/src/main/java/ch/qos/logback/classic/pattern/ClassicConverter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import ch.qos.logback.core.pattern.DynamicConverter;
1818

1919
/**
20-
* This class serves the super-class of all converters in logback. It extends
20+
* This class serves the super-class of almost all converters in logback-classic. It extends
2121
* {@link DynamicConverter}.
2222
*
2323
* @author Ceki Gulcu

Diff for: logback-classic/src/test/java/ch/qos/logback/classic/pattern/SubPatternLayout.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,16 @@
2020

2121
/**
2222
* Test backward compatibility support by virtue of correct compilation.
23+
*
24+
* See also SubPatternLayoutTest
2325
*/
2426
public class SubPatternLayout extends PatternLayout {
2527

28+
static String DOOO = "dooo";
29+
2630
SubPatternLayout() {
2731
Map<String, String> defaultConverterMap = getDefaultConverterMap();
28-
defaultConverterMap.put("dooo", DateConverter.class.getName());
32+
defaultConverterMap.put(DOOO, DateConverter.class.getName());
2933
}
3034

3135
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Logback: the reliable, generic, fast and flexible logging framework.
3+
* Copyright (C) 1999-2024, QOS.ch. All rights reserved.
4+
*
5+
* This program and the accompanying materials are dual-licensed under
6+
* either the terms of the Eclipse Public License v1.0 as published by
7+
* the Eclipse Foundation
8+
*
9+
* or (per the licensee's choosing)
10+
*
11+
* under the terms of the GNU Lesser General Public License version 2.1
12+
* as published by the Free Software Foundation.
13+
*/
14+
15+
package ch.qos.logback.classic.pattern;
16+
17+
import ch.qos.logback.classic.LoggerContext;
18+
import ch.qos.logback.classic.spi.LoggingEvent;
19+
import org.junit.jupiter.api.Test;
20+
21+
import static org.junit.jupiter.api.Assertions.assertEquals;
22+
23+
public class SubPatternLayoutTest {
24+
25+
LoggerContext context = new LoggerContext();
26+
27+
@Test public void smoke() {
28+
SubPatternLayout layout = new SubPatternLayout();
29+
layout.setPattern("%"+SubPatternLayout.DOOO);
30+
layout.setContext(context);
31+
layout.start();
32+
LoggingEvent event = new LoggingEvent();
33+
event.setTimeStamp(0);
34+
35+
String result = layout.doLayout(event);
36+
assertEquals("1970-01-01 01:00:00,000", result);
37+
}
38+
}

Diff for: logback-core/src/main/java/ch/qos/logback/core/html/HTMLLayoutBase.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public void start() {
9797
}
9898
}
9999

100-
protected abstract Map<String, Supplier<DynamicConverter>> getDefaultConverterMap();
100+
protected abstract Map<String, Supplier<DynamicConverter>> getDefaultConverterSupplierMap();
101101

102102
/**
103103
* Returns a map where the default converter map is merged with the map
@@ -107,9 +107,9 @@ public Map<String, Supplier<DynamicConverter>> getEffectiveConverterMap() {
107107
Map<String, Supplier<DynamicConverter>> effectiveMap = new HashMap<>();
108108

109109
// add the least specific map fist
110-
Map<String, Supplier<DynamicConverter>> defaultMap = getDefaultConverterMap();
111-
if (defaultMap != null) {
112-
effectiveMap.putAll(defaultMap);
110+
Map<String, Supplier<DynamicConverter>> defaultSupplierMap = getDefaultConverterSupplierMap();
111+
if (defaultSupplierMap != null) {
112+
effectiveMap.putAll(defaultSupplierMap);
113113
}
114114

115115
// contextMap is more specific than the default map

Diff for: logback-core/src/main/java/ch/qos/logback/core/pattern/DynamicConverter.java

+7
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@
2121
import ch.qos.logback.core.spi.LifeCycle;
2222
import ch.qos.logback.core.status.Status;
2323

24+
/**
25+
* As the name suggests, a DynamicConverter performs a conversion based on the parameter E
26+
* given to the {@link #convert(E)} method. Almost all converters are derived from the
27+
* DynamicConverter class.
28+
*
29+
* @param <E>
30+
*/
2431
abstract public class DynamicConverter<E> extends FormattingConverter<E> implements LifeCycle, ContextAware {
2532

2633
ContextAwareBase cab = new ContextAwareBase(this);

0 commit comments

Comments
 (0)