Skip to content

Commit

Permalink
Make ThreadNameJsonProvider usable with both ILoggingEvent and IAcces…
Browse files Browse the repository at this point in the history
…sEvent

Refactor the existing ThreadNameJsonProvider and associate utility classes to make them usable for both ILoggingEvent and IAccessEvent.

Closes #660
  • Loading branch information
brenuart committed Sep 29, 2021
1 parent 3f8ad8d commit fca5839
Show file tree
Hide file tree
Showing 13 changed files with 112 additions and 57 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2273,6 +2273,14 @@ The provider name is the xml element name to use when configuring.
</ul>
</td>
</tr>
<tr>
<td><tt>threadName</tt></td>
<td><p>Name of the thread from which the event was logged</p>
<ul>
<li><tt>fieldName</tt> - Output field name (<tt>thread_name</tt>)</li>
</ul>
</td>
</tr>
<tr>
<td><tt>nestedField</tt></td>
<td>
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/net/logstash/logback/LogstashFormatter.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@
import net.logstash.logback.composite.loggingevent.LoggingEventCompositeJsonFormatter;
import net.logstash.logback.composite.loggingevent.LoggingEventFormattedTimestampJsonProvider;
import net.logstash.logback.composite.loggingevent.LoggingEventJsonProviders;
import net.logstash.logback.composite.loggingevent.LoggingEventThreadNameJsonProvider;
import net.logstash.logback.composite.loggingevent.LogstashMarkersJsonProvider;
import net.logstash.logback.composite.loggingevent.MdcJsonProvider;
import net.logstash.logback.composite.loggingevent.MessageJsonProvider;
import net.logstash.logback.composite.loggingevent.StackTraceJsonProvider;
import net.logstash.logback.composite.loggingevent.TagsJsonProvider;
import net.logstash.logback.composite.loggingevent.ThreadNameJsonProvider;
import net.logstash.logback.fieldnames.LogstashFieldNames;

import ch.qos.logback.classic.pattern.ThrowableHandlingConverter;
Expand Down Expand Up @@ -71,7 +71,7 @@ public class LogstashFormatter extends LoggingEventCompositeJsonFormatter {
private final LogstashVersionJsonProvider<ILoggingEvent> versionProvider = new LogstashVersionJsonProvider<>();
private final MessageJsonProvider messageProvider = new MessageJsonProvider();
private final LoggerNameJsonProvider loggerNameProvider = new LoggerNameJsonProvider();
private final ThreadNameJsonProvider threadNameProvider = new ThreadNameJsonProvider();
private final LoggingEventThreadNameJsonProvider threadNameProvider = new LoggingEventThreadNameJsonProvider();
private final LogLevelJsonProvider logLevelProvider = new LogLevelJsonProvider();
private final LogLevelValueJsonProvider logLevelValueProvider = new LogLevelValueJsonProvider();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,28 @@

import java.io.IOException;

import net.logstash.logback.composite.AbstractFieldJsonProvider;
import net.logstash.logback.composite.FieldNamesAware;
import net.logstash.logback.composite.JsonWritingUtils;
import net.logstash.logback.fieldnames.LogstashFieldNames;
import net.logstash.logback.fieldnames.LogstashCommonFieldNames;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.spi.DeferredProcessingAware;
import com.fasterxml.jackson.core.JsonGenerator;

public class ThreadNameJsonProvider extends AbstractFieldJsonProvider<ILoggingEvent> implements FieldNamesAware<LogstashFieldNames> {
public abstract class AbstractThreadNameJsonProvider<Event extends DeferredProcessingAware> extends AbstractFieldJsonProvider<Event> implements FieldNamesAware<LogstashCommonFieldNames> {

public static final String FIELD_THREAD_NAME = "thread_name";

public ThreadNameJsonProvider() {
public AbstractThreadNameJsonProvider() {
setFieldName(FIELD_THREAD_NAME);
}

@Override
public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOException {
JsonWritingUtils.writeStringField(generator, getFieldName(), event.getThreadName());
public void writeTo(JsonGenerator generator, Event event) throws IOException {
JsonWritingUtils.writeStringField(generator, getFieldName(), getThreadName(event));
}

@Override
public void setFieldNames(LogstashFieldNames fieldNames) {
public void setFieldNames(LogstashCommonFieldNames fieldNames) {
setFieldName(fieldNames.getThread());
}

protected abstract String getThreadName(Event event);
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,5 +87,7 @@ public void addNestedField(AccessEventNestedJsonProvider provider) {
public void addGlobalCustomFields(GlobalCustomFieldsJsonProvider<IAccessEvent> provider) {
addProvider(provider);
}

public void addThreadName(AccessEventThreadNameJsonProvider provider) {
addProvider(provider);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright 2013-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.logstash.logback.composite.accessevent;

import net.logstash.logback.composite.AbstractThreadNameJsonProvider;
import net.logstash.logback.composite.JsonProvider;

import ch.qos.logback.access.spi.IAccessEvent;

/**
* {@link JsonProvider} producing a single JSON field with the {@link IAccessEvent#getThreadName()}.
*
* @author brenuart
*/
public class AccessEventThreadNameJsonProvider extends AbstractThreadNameJsonProvider<IAccessEvent> {

@Override
protected String getThreadName(IAccessEvent event) {
return event.getThreadName();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public void addRawMessage(RawMessageJsonProvider provider) {
public void addLoggerName(LoggerNameJsonProvider provider) {
addProvider(provider);
}
public void addThreadName(ThreadNameJsonProvider provider) {
public void addThreadName(LoggingEventThreadNameJsonProvider provider) {
addProvider(provider);
}
public void addLogLevel(LogLevelJsonProvider provider) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright 2013-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.logstash.logback.composite.loggingevent;

import net.logstash.logback.composite.AbstractThreadNameJsonProvider;
import net.logstash.logback.composite.JsonProvider;

import ch.qos.logback.classic.spi.ILoggingEvent;

/**
* {@link JsonProvider} producing a single JSON field with the {@link ILoggingEvent#getThreadName()}.
*
* @author brenuart
*/
public class LoggingEventThreadNameJsonProvider extends AbstractThreadNameJsonProvider<ILoggingEvent> {

@Override
protected String getThreadName(ILoggingEvent event) {
return event.getThreadName();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,32 +15,12 @@
*/
package net.logstash.logback.composite.loggingevent;

import java.io.IOException;

import net.logstash.logback.composite.AbstractFieldJsonProvider;
import net.logstash.logback.composite.FieldNamesAware;
import net.logstash.logback.composite.JsonWritingUtils;
import net.logstash.logback.fieldnames.LogstashFieldNames;

import ch.qos.logback.classic.spi.ILoggingEvent;
import com.fasterxml.jackson.core.JsonGenerator;

public class ThreadNameJsonProvider extends AbstractFieldJsonProvider<ILoggingEvent> implements FieldNamesAware<LogstashFieldNames> {
/**
* @deprecated Use {@link LoggingEventThreadNameJsonProvider} instead.
*/
@Deprecated
public class ThreadNameJsonProvider extends LoggingEventThreadNameJsonProvider {

public static final String FIELD_THREAD_NAME = "thread_name";
public static final String FIELD_THREAD_NAME = LoggingEventThreadNameJsonProvider.FIELD_THREAD_NAME;

public ThreadNameJsonProvider() {
setFieldName(FIELD_THREAD_NAME);
}

@Override
public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOException {
JsonWritingUtils.writeStringField(generator, getFieldName(), event.getThreadName());
}

@Override
public void setFieldNames(LogstashFieldNames fieldNames) {
setFieldName(fieldNames.getThread());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
* Outputs random UUID as field value.
* Handy when you want to provide unique identifier for log lines.
*
* @Deprecated use {@link UuidJsonProvider} instead.
* @deprecated use {@link UuidJsonProvider} instead.
*/
@Deprecated
public class UuidProvider extends UuidJsonProvider<ILoggingEvent> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package net.logstash.logback.fieldnames;

import net.logstash.logback.composite.AbstractThreadNameJsonProvider;
import net.logstash.logback.composite.FormattedTimestampJsonProvider;
import net.logstash.logback.composite.LogstashVersionJsonProvider;
import net.logstash.logback.composite.UuidJsonProvider;
Expand Down Expand Up @@ -42,6 +43,7 @@ public abstract class LogstashCommonFieldNames {
private String timestamp = FormattedTimestampJsonProvider.FIELD_TIMESTAMP;
private String version = LogstashVersionJsonProvider.FIELD_VERSION;
private String message = MessageJsonProvider.FIELD_MESSAGE;
private String thread = AbstractThreadNameJsonProvider.FIELD_THREAD_NAME;
private String uuid = UuidJsonProvider.FIELD_UUID;

private String context;
Expand Down Expand Up @@ -89,7 +91,14 @@ public void setContext(String context) {
this.context = context;
}


public String getThread() {
return thread;
}

public void setThread(String thread) {
this.thread = thread;
}

public String getUuid() {
return uuid;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,13 @@
import net.logstash.logback.composite.loggingevent.RootStackTraceElementJsonProvider;
import net.logstash.logback.composite.loggingevent.StackTraceJsonProvider;
import net.logstash.logback.composite.loggingevent.TagsJsonProvider;
import net.logstash.logback.composite.loggingevent.ThreadNameJsonProvider;

/**
* Names of standard fields that appear in the JSON output.
*/
public class LogstashFieldNames extends LogstashCommonFieldNames {

private String logger = LoggerNameJsonProvider.FIELD_LOGGER_NAME;
private String thread = ThreadNameJsonProvider.FIELD_THREAD_NAME;
private String level = LogLevelJsonProvider.FIELD_LEVEL;
private String levelValue = LogLevelValueJsonProvider.FIELD_LEVEL_VALUE;
private String caller;
Expand All @@ -54,14 +52,6 @@ public void setLogger(String logger) {
this.logger = logger;
}

public String getThread() {
return thread;
}

public void setThread(String thread) {
this.thread = thread;
}

public String getLevel() {
return level;
}
Expand Down
4 changes: 2 additions & 2 deletions src/test/java/net/logstash/logback/ConfigurationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,13 @@
import net.logstash.logback.composite.loggingevent.LoggingEventFormattedTimestampJsonProvider;
import net.logstash.logback.composite.loggingevent.LoggingEventNestedJsonProvider;
import net.logstash.logback.composite.loggingevent.LoggingEventPatternJsonProvider;
import net.logstash.logback.composite.loggingevent.LoggingEventThreadNameJsonProvider;
import net.logstash.logback.composite.loggingevent.LogstashMarkersJsonProvider;
import net.logstash.logback.composite.loggingevent.MdcJsonProvider;
import net.logstash.logback.composite.loggingevent.MessageJsonProvider;
import net.logstash.logback.composite.loggingevent.RawMessageJsonProvider;
import net.logstash.logback.composite.loggingevent.StackTraceJsonProvider;
import net.logstash.logback.composite.loggingevent.TagsJsonProvider;
import net.logstash.logback.composite.loggingevent.ThreadNameJsonProvider;
import net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder;
import net.logstash.logback.marker.Markers;
import net.logstash.logback.stacktrace.ShortenedThrowableConverter;
Expand Down Expand Up @@ -129,7 +129,7 @@ private void verifyCommonProviders(List<JsonProvider<ILoggingEvent>> providers)
Assertions.assertNotNull(loggerNameJsonProvider);
Assertions.assertEquals("logger_name", loggerNameJsonProvider.getFieldName());

ThreadNameJsonProvider threadNameJsonProvider = getInstance(providers, ThreadNameJsonProvider.class);
LoggingEventThreadNameJsonProvider threadNameJsonProvider = getInstance(providers, LoggingEventThreadNameJsonProvider.class);
Assertions.assertNotNull(threadNameJsonProvider);
Assertions.assertEquals("thread_name", threadNameJsonProvider.getFieldName());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public class ThreadNameJsonProviderTest {
public class LoggingEventThreadNameJsonProviderTest {

private ThreadNameJsonProvider provider = new ThreadNameJsonProvider();
private LoggingEventThreadNameJsonProvider provider = new LoggingEventThreadNameJsonProvider();

@Mock
private JsonGenerator generator;
Expand All @@ -47,7 +47,7 @@ public void testDefaultName() throws IOException {

provider.writeTo(generator, event);

verify(generator).writeStringField(ThreadNameJsonProvider.FIELD_THREAD_NAME, "threadName");
verify(generator).writeStringField(LoggingEventThreadNameJsonProvider.FIELD_THREAD_NAME, "threadName");
}

@Test
Expand Down

0 comments on commit fca5839

Please sign in to comment.