Skip to content

Commit b3636b2

Browse files
committed
Deprecate Message#getFormat()
1 parent 132deb2 commit b3636b2

File tree

11 files changed

+28
-73
lines changed

11 files changed

+28
-73
lines changed

log4j-api-test/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1446,11 +1446,6 @@ public String getFormattedMessage() {
14461446
return null;
14471447
}
14481448

1449-
@Override
1450-
public String getFormat() {
1451-
return null;
1452-
}
1453-
14541449
@Override
14551450
public Object[] getParameters() {
14561451
return Constants.EMPTY_OBJECT_ARRAY;

log4j-api/src/main/java/org/apache/logging/log4j/message/Message.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,15 @@ public interface Message extends Serializable {
6969
String getFormattedMessage();
7070

7171
/**
72-
* Gets the format portion of the Message.
72+
* This method has unclear semantics and inconsistent implementations – its usage is strongly discouraged.
7373
*
74-
* @return The message format. Some implementations, such as ParameterizedMessage, will use this as
75-
* the message "pattern". Other Messages may simply return an empty String.
76-
* TODO Do all messages have a format? What syntax? Using a Formatter object could be cleaner.
77-
* (RG) In SimpleMessage the format is identical to the formatted message. In ParameterizedMessage and
78-
* StructuredDataMessage it is not. It is up to the Message implementer to determine what this
79-
* method will return. A Formatter is inappropriate as this is very specific to the Message
80-
* implementation so it isn't clear to me how having a Formatter separate from the Message would be cleaner.
74+
* @deprecated Deprecated since version {@code 2.24.0}.
75+
* Use {@link MultiformatMessage} instead to implement messages that can format themselves in one or more encodings.
8176
*/
82-
String getFormat();
77+
@Deprecated
78+
default String getFormat() {
79+
return null;
80+
}
8381

8482
/**
8583
* Gets parameter values, if any.

log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerArgumentFreedOnErrorTest.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,6 @@ public String getFormattedMessage() {
8383
throw new Error("Expected");
8484
}
8585

86-
@Override
87-
public String getFormat() {
88-
return Strings.EMPTY;
89-
}
90-
9186
@Override
9287
public Object[] getParameters() {
9388
return org.apache.logging.log4j.util.Constants.EMPTY_OBJECT_ARRAY;

log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigErrorOnFormat.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,6 @@ public String getFormattedMessage() {
8383
"getFormattedMessage invoked on " + Thread.currentThread().getName());
8484
}
8585

86-
@Override
87-
public String getFormat() {
88-
return null;
89-
}
90-
9186
@Override
9287
public Object[] getParameters() {
9388
return null;

log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLogger3Test.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,6 @@ public String getFormattedMessage() {
9393
return "formatted";
9494
}
9595

96-
@Override
97-
public String getFormat() {
98-
return null;
99-
}
100-
10196
@Override
10297
public Object[] getParameters() {
10398
return org.apache.logging.log4j.util.Constants.EMPTY_OBJECT_ARRAY;

log4j-core-test/src/test/java/org/apache/logging/log4j/core/lookup/JndiRestrictedLookupTest.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import javax.naming.Referenceable;
2626
import javax.naming.StringRefAddr;
2727
import org.apache.logging.log4j.message.Message;
28-
import org.apache.logging.log4j.util.Strings;
2928
import org.junit.BeforeClass;
3029
import org.junit.Rule;
3130
import org.junit.Test;
@@ -151,11 +150,6 @@ public String getFormattedMessage() {
151150
return message;
152151
}
153152

154-
@Override
155-
public String getFormat() {
156-
return Strings.EMPTY;
157-
}
158-
159153
@Override
160154
public Object[] getParameters() {
161155
return null;

log4j-layout-template-json-test/src/test/java/org/apache/logging/log4j/layout/template/json/resolver/MessageResolverTest.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.apache.logging.log4j.layout.template.json.JsonTemplateLayout;
3838
import org.apache.logging.log4j.layout.template.json.util.JsonReader;
3939
import org.apache.logging.log4j.message.Message;
40+
import org.apache.logging.log4j.message.MultiformatMessage;
4041
import org.apache.logging.log4j.message.ObjectMessage;
4142
import org.apache.logging.log4j.message.SimpleMessage;
4243
import org.apache.logging.log4j.message.StringMapMessage;
@@ -203,7 +204,7 @@ void test_MapMessage() {
203204
}
204205

205206
@Test
206-
void test_custom_Message() {
207+
void test_MultiformatMessage() {
207208

208209
// Create the event template
209210
final String eventTemplate = writeJson(asMap("$resolver", "message"));
@@ -216,7 +217,7 @@ void test_custom_Message() {
216217

217218
// Create the log event with a `TestMessage`
218219
final LogEvent logEvent = Log4jLogEvent.newBuilder()
219-
.setMessage(new TestMessage())
220+
.setMessage(new TestMultiformatMessage())
220221
.setTimeMillis(System.currentTimeMillis())
221222
.build();
222223

@@ -225,16 +226,24 @@ void test_custom_Message() {
225226
.isEqualTo("bar"));
226227
}
227228

228-
private static final class TestMessage implements Message {
229+
private static final class TestMultiformatMessage implements MultiformatMessage {
229230

230231
@Override
231232
public String getFormattedMessage() {
232233
return "{\"foo\": \"bar\"}";
233234
}
234235

235236
@Override
236-
public String getFormat() {
237-
return "JSON";
237+
public String[] getFormats() {
238+
return new String[] {"JSON"};
239+
}
240+
241+
@Override
242+
public String getFormattedMessage(final String[] formats) {
243+
if (formats.length != 1 || !"JSON".equals(formats[0])) {
244+
throw new UnsupportedOperationException();
245+
}
246+
return getFormattedMessage();
238247
}
239248

240249
@Override

log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/MessageResolver.java

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -137,22 +137,17 @@ private static void resolveString(final String fallbackKey, final Message messag
137137
private static EventResolver createObjectResolver(final String fallbackKey) {
138138
return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
139139

140-
// Skip custom serializers for `SimpleMessage`
140+
// Skip custom serializers for SimpleMessage.
141141
final Message message = logEvent.getMessage();
142142
final boolean simple = message instanceof SimpleMessage;
143143
if (!simple) {
144144

145-
// Try `Message` serializer
146-
if (writeMessage(jsonWriter, message)) {
147-
return;
148-
}
149-
150-
// Try `MultiformatMessage` serializer
145+
// Try MultiformatMessage serializer.
151146
if (writeMultiformatMessage(jsonWriter, message)) {
152147
return;
153148
}
154149

155-
// Try `ObjectMessage` serializer
150+
// Try ObjectMessage serializer.
156151
if (writeObjectMessage(jsonWriter, message)) {
157152
return;
158153
}
@@ -163,20 +158,6 @@ private static EventResolver createObjectResolver(final String fallbackKey) {
163158
};
164159
}
165160

166-
private static boolean writeMessage(final JsonWriter jsonWriter, final Message message) {
167-
168-
// Check the format
169-
final String format = message.getFormat();
170-
if (!FORMATS[0].equalsIgnoreCase(format)) {
171-
return false;
172-
}
173-
174-
// Write the formatted message
175-
final String messageJson = message.getFormattedMessage();
176-
jsonWriter.writeRawString(messageJson);
177-
return true;
178-
}
179-
180161
private static boolean writeMultiformatMessage(final JsonWriter jsonWriter, final Message message) {
181162

182163
// Check type.

log4j-perf-test/src/main/java/org/apache/logging/log4j/perf/nogc/NoGcMessage.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,6 @@ public String getFormattedMessage() {
8787
return getState().buffer.toString(); // not called by NoGcLayout
8888
}
8989

90-
@Override
91-
public String getFormat() {
92-
return null;
93-
}
94-
9590
@Override
9691
public Object[] getParameters() {
9792
return getState().getParamsCopy();

src/changelog/.2.x.x/fix-MessageResolver-getFormat-handling.xml renamed to src/changelog/.2.x.x/deprecate-Message-getFormat.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
33
xmlns="https://logging.apache.org/xml/ns"
44
xsi:schemaLocation="https://logging.apache.org/xml/ns https://logging.apache.org/xml/ns/log4j-changelog-0.xsd"
5-
type="fixed">
6-
<description format="asciidoc">Fix handling of `Message#getFormat()` in `MessageResolver` of `JsonTemplateLayout`</description>
5+
type="deprecated">
6+
<description format="asciidoc">Deprecate `Message#getFormat()` due to unclear semantics and inconsistent implementations</description>
77
</entry>

0 commit comments

Comments
 (0)