Skip to content

Commit

Permalink
discoverable logging
Browse files Browse the repository at this point in the history
* make jdk log hijacking run once
* make bootstrap run once, and pull into a Utility class
* LoggingFactory a discoverable an interface
* Old LoggingFactory becomes DefaultLoggingFactory
  • Loading branch information
carlo-rtr committed May 8, 2015
1 parent 6844664 commit 847275a
Show file tree
Hide file tree
Showing 40 changed files with 387 additions and 318 deletions.
Expand Up @@ -7,7 +7,7 @@
import io.dropwizard.auth.Authenticator; import io.dropwizard.auth.Authenticator;
import io.dropwizard.auth.util.AuthUtil; import io.dropwizard.auth.util.AuthUtil;
import io.dropwizard.jersey.DropwizardResourceConfig; import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature; import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature;
import org.glassfish.jersey.servlet.ServletProperties; import org.glassfish.jersey.servlet.ServletProperties;
import org.glassfish.jersey.test.DeploymentContext; import org.glassfish.jersey.test.DeploymentContext;
Expand Down Expand Up @@ -36,7 +36,7 @@
public class BasicAuthProviderTest extends JerseyTest { public class BasicAuthProviderTest extends JerseyTest {
final private static String VALID_ROLE = "ADMIN"; final private static String VALID_ROLE = "ADMIN";
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


@Override @Override
Expand Down
Expand Up @@ -4,7 +4,7 @@
import io.dropwizard.auth.*; import io.dropwizard.auth.*;
import io.dropwizard.auth.util.AuthUtil; import io.dropwizard.auth.util.AuthUtil;
import io.dropwizard.jersey.DropwizardResourceConfig; import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature; import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature;
import org.glassfish.jersey.servlet.ServletProperties; import org.glassfish.jersey.servlet.ServletProperties;
import org.glassfish.jersey.test.DeploymentContext; import org.glassfish.jersey.test.DeploymentContext;
Expand Down Expand Up @@ -34,7 +34,7 @@
public class BasicCustomAuthProviderTest extends JerseyTest { public class BasicCustomAuthProviderTest extends JerseyTest {
final private static String VALID_ROLE = "ADMIN"; final private static String VALID_ROLE = "ADMIN";
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


@Override @Override
Expand Down
Expand Up @@ -12,7 +12,7 @@
import io.dropwizard.auth.oauth.OAuthCredentialAuthFilter; import io.dropwizard.auth.oauth.OAuthCredentialAuthFilter;
import io.dropwizard.auth.util.AuthUtil; import io.dropwizard.auth.util.AuthUtil;
import io.dropwizard.jersey.DropwizardResourceConfig; import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature; import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature;
import org.glassfish.jersey.servlet.ServletProperties; import org.glassfish.jersey.servlet.ServletProperties;
import org.glassfish.jersey.test.DeploymentContext; import org.glassfish.jersey.test.DeploymentContext;
Expand Down Expand Up @@ -40,7 +40,7 @@
public class ChainedAuthProviderTest extends JerseyTest { public class ChainedAuthProviderTest extends JerseyTest {
private static final String ADMIN_ROLE = "ADMIN"; private static final String ADMIN_ROLE = "ADMIN";
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


@Override @Override
Expand Down
Expand Up @@ -6,7 +6,7 @@
import io.dropwizard.auth.AuthResource; import io.dropwizard.auth.AuthResource;
import io.dropwizard.auth.util.AuthUtil; import io.dropwizard.auth.util.AuthUtil;
import io.dropwizard.jersey.DropwizardResourceConfig; import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature; import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature;
import org.glassfish.jersey.servlet.ServletProperties; import org.glassfish.jersey.servlet.ServletProperties;
import org.glassfish.jersey.test.DeploymentContext; import org.glassfish.jersey.test.DeploymentContext;
Expand All @@ -25,7 +25,7 @@


public class OAuthCustomProviderTest extends JerseyTest { public class OAuthCustomProviderTest extends JerseyTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


@Override @Override
Expand Down
Expand Up @@ -6,7 +6,7 @@
import io.dropwizard.auth.AuthResource; import io.dropwizard.auth.AuthResource;
import io.dropwizard.auth.util.AuthUtil; import io.dropwizard.auth.util.AuthUtil;
import io.dropwizard.jersey.DropwizardResourceConfig; import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature; import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature;
import org.glassfish.jersey.servlet.ServletProperties; import org.glassfish.jersey.servlet.ServletProperties;
import org.glassfish.jersey.test.DeploymentContext; import org.glassfish.jersey.test.DeploymentContext;
Expand All @@ -26,7 +26,7 @@


public class OAuthProviderTest extends JerseyTest { public class OAuthProviderTest extends JerseyTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


@Override @Override
Expand Down
10 changes: 7 additions & 3 deletions dropwizard-core/src/main/java/io/dropwizard/Application.java
Expand Up @@ -3,7 +3,7 @@
import io.dropwizard.cli.CheckCommand; import io.dropwizard.cli.CheckCommand;
import io.dropwizard.cli.Cli; import io.dropwizard.cli.Cli;
import io.dropwizard.cli.ServerCommand; import io.dropwizard.cli.ServerCommand;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment; import io.dropwizard.setup.Environment;
import io.dropwizard.util.Generics; import io.dropwizard.util.Generics;
Expand All @@ -12,12 +12,16 @@
/** /**
* The base class for Dropwizard applications. * The base class for Dropwizard applications.
* *
* The default constructor will be inherited in subclasses if
* a default constructor isn't provided. If you do provide one,
* it's important to call default constructor to preserve logging
*
* @param <T> the type of configuration class for this application * @param <T> the type of configuration class for this application
*/ */
public abstract class Application<T extends Configuration> { public abstract class Application<T extends Configuration> {
static { protected Application() {
// make sure spinning up Hibernate Validator doesn't yell at us // make sure spinning up Hibernate Validator doesn't yell at us
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


/** /**
Expand Down
Expand Up @@ -2,6 +2,7 @@


import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.MoreObjects; import com.google.common.base.MoreObjects;
import io.dropwizard.logging.DefaultLoggingFactory;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.LoggingFactory;
import io.dropwizard.metrics.MetricsFactory; import io.dropwizard.metrics.MetricsFactory;
import io.dropwizard.server.DefaultServerFactory; import io.dropwizard.server.DefaultServerFactory;
Expand Down Expand Up @@ -65,7 +66,7 @@ public class Configuration {


@Valid @Valid
@NotNull @NotNull
private LoggingFactory logging = new LoggingFactory(); private LoggingFactory logging = new DefaultLoggingFactory();


@Valid @Valid
@NotNull @NotNull
Expand Down
Expand Up @@ -4,7 +4,7 @@
import com.codahale.metrics.health.HealthCheckRegistry; import com.codahale.metrics.health.HealthCheckRegistry;
import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableMultimap;
import io.dropwizard.jetty.MutableServletContextHandler; import io.dropwizard.jetty.MutableServletContextHandler;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import io.dropwizard.servlets.tasks.Task; import io.dropwizard.servlets.tasks.Task;
import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.Server;
import org.junit.Test; import org.junit.Test;
Expand All @@ -16,7 +16,7 @@


public class AdminEnvironmentTest { public class AdminEnvironmentTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


private final MutableServletContextHandler handler = new MutableServletContextHandler(); private final MutableServletContextHandler handler = new MutableServletContextHandler();
Expand Down
@@ -1,7 +1,6 @@
package io.dropwizard.hibernate; package io.dropwizard.hibernate;


import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import io.dropwizard.db.DataSourceFactory; import io.dropwizard.db.DataSourceFactory;
Expand All @@ -10,7 +9,7 @@
import io.dropwizard.jersey.errors.ErrorMessage; import io.dropwizard.jersey.errors.ErrorMessage;
import io.dropwizard.jersey.jackson.JacksonMessageBodyProvider; import io.dropwizard.jersey.jackson.JacksonMessageBodyProvider;
import io.dropwizard.lifecycle.setup.LifecycleEnvironment; import io.dropwizard.lifecycle.setup.LifecycleEnvironment;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import io.dropwizard.setup.Environment; import io.dropwizard.setup.Environment;
import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.test.JerseyTest; import org.glassfish.jersey.test.JerseyTest;
Expand All @@ -29,7 +28,6 @@
import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import java.util.TimeZone;


import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown; import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown;
Expand All @@ -38,7 +36,7 @@


public class JerseyIntegrationTest extends JerseyTest { public class JerseyIntegrationTest extends JerseyTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


public static class PersonDAO extends AbstractDAO<Person> { public static class PersonDAO extends AbstractDAO<Person> {
Expand Down
Expand Up @@ -5,7 +5,7 @@
import io.dropwizard.db.DataSourceFactory; import io.dropwizard.db.DataSourceFactory;
import io.dropwizard.db.ManagedPooledDataSource; import io.dropwizard.db.ManagedPooledDataSource;
import io.dropwizard.lifecycle.setup.LifecycleEnvironment; import io.dropwizard.lifecycle.setup.LifecycleEnvironment;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import io.dropwizard.setup.Environment; import io.dropwizard.setup.Environment;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.SessionFactory; import org.hibernate.SessionFactory;
Expand All @@ -22,7 +22,7 @@


public class SessionFactoryFactoryTest { public class SessionFactoryFactoryTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


private final SessionFactoryFactory factory = new SessionFactoryFactory(); private final SessionFactoryFactory factory = new SessionFactoryFactory();
Expand Down
Expand Up @@ -9,7 +9,7 @@
import io.dropwizard.db.ManagedDataSource; import io.dropwizard.db.ManagedDataSource;
import io.dropwizard.lifecycle.Managed; import io.dropwizard.lifecycle.Managed;
import io.dropwizard.lifecycle.setup.LifecycleEnvironment; import io.dropwizard.lifecycle.setup.LifecycleEnvironment;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import io.dropwizard.setup.Environment; import io.dropwizard.setup.Environment;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.junit.After; import org.junit.After;
Expand All @@ -34,7 +34,7 @@ public class JDBITest {
private final DataSourceFactory hsqlConfig = new DataSourceFactory(); private final DataSourceFactory hsqlConfig = new DataSourceFactory();


{ {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
hsqlConfig.setUrl("jdbc:h2:mem:DbTest-" + System.currentTimeMillis()); hsqlConfig.setUrl("jdbc:h2:mem:DbTest-" + System.currentTimeMillis());
hsqlConfig.setUser("sa"); hsqlConfig.setUser("sa");
hsqlConfig.setDriverClass("org.h2.Driver"); hsqlConfig.setDriverClass("org.h2.Driver");
Expand Down
Expand Up @@ -2,7 +2,7 @@


import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import io.dropwizard.jersey.dummy.DummyResource; import io.dropwizard.jersey.dummy.DummyResource;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import org.glassfish.jersey.test.JerseyTest; import org.glassfish.jersey.test.JerseyTest;
import org.glassfish.jersey.test.TestProperties; import org.glassfish.jersey.test.TestProperties;
import org.junit.Test; import org.junit.Test;
Expand All @@ -15,7 +15,7 @@


public class AsyncServletTest extends JerseyTest { public class AsyncServletTest extends JerseyTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


@Override @Override
Expand Down
Expand Up @@ -2,7 +2,8 @@


import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import io.dropwizard.jersey.dummy.DummyResource; import io.dropwizard.jersey.dummy.DummyResource;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;

import java.util.regex.Pattern; import java.util.regex.Pattern;
import javax.ws.rs.DELETE; import javax.ws.rs.DELETE;
import javax.ws.rs.POST; import javax.ws.rs.POST;
Expand All @@ -16,7 +17,7 @@


public class DropwizardResourceConfigTest { public class DropwizardResourceConfigTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


private DropwizardResourceConfig rc; private DropwizardResourceConfig rc;
Expand Down
Expand Up @@ -2,7 +2,7 @@


import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import io.dropwizard.jersey.dummy.DummyResource; import io.dropwizard.jersey.dummy.DummyResource;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import org.glassfish.jersey.test.JerseyTest; import org.glassfish.jersey.test.JerseyTest;
import org.glassfish.jersey.test.TestProperties; import org.glassfish.jersey.test.TestProperties;
import org.junit.Test; import org.junit.Test;
Expand All @@ -15,7 +15,7 @@


public class JerseyContentTypeTest extends JerseyTest { public class JerseyContentTypeTest extends JerseyTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


@Override @Override
Expand Down
@@ -1,7 +1,7 @@
package io.dropwizard.jersey.caching; package io.dropwizard.jersey.caching;


import io.dropwizard.jersey.DropwizardResourceConfig; import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;


import javax.ws.rs.core.Application; import javax.ws.rs.core.Application;
import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.HttpHeaders;
Expand All @@ -18,7 +18,7 @@


public class CacheControlledResponseFeatureTest extends JerseyTest { public class CacheControlledResponseFeatureTest extends JerseyTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


@Override @Override
Expand Down
Expand Up @@ -2,7 +2,7 @@


import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import io.dropwizard.jersey.DropwizardResourceConfig; import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import org.glassfish.jersey.test.JerseyTest; import org.glassfish.jersey.test.JerseyTest;
import org.glassfish.jersey.test.TestProperties; import org.glassfish.jersey.test.TestProperties;
import org.junit.Test; import org.junit.Test;
Expand All @@ -17,7 +17,7 @@


public class LoggingExceptionMapperTest extends JerseyTest { public class LoggingExceptionMapperTest extends JerseyTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


@Override @Override
Expand Down
Expand Up @@ -3,7 +3,7 @@
import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import io.dropwizard.jersey.DropwizardResourceConfig; import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.ServerProperties; import org.glassfish.jersey.server.ServerProperties;
import org.glassfish.jersey.servlet.ServletProperties; import org.glassfish.jersey.servlet.ServletProperties;
Expand All @@ -23,7 +23,6 @@
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.client.Entity; import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import java.io.IOException; import java.io.IOException;
Expand All @@ -38,7 +37,7 @@


public class AllowedMethodsFilterTest extends JerseyTest { public class AllowedMethodsFilterTest extends JerseyTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


private static final int DISALLOWED_STATUS_CODE = Response.Status.METHOD_NOT_ALLOWED.getStatusCode(); private static final int DISALLOWED_STATUS_CODE = Response.Status.METHOD_NOT_ALLOWED.getStatusCode();
Expand Down
Expand Up @@ -4,7 +4,7 @@
import com.google.common.base.Optional; import com.google.common.base.Optional;
import io.dropwizard.jersey.DropwizardResourceConfig; import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.jersey.params.UUIDParam; import io.dropwizard.jersey.params.UUIDParam;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import org.glassfish.jersey.test.JerseyTest; import org.glassfish.jersey.test.JerseyTest;
import org.glassfish.jersey.test.TestProperties; import org.glassfish.jersey.test.TestProperties;
import org.junit.Test; import org.junit.Test;
Expand All @@ -19,7 +19,7 @@


public class OptionalCookieParamResourceTest extends JerseyTest { public class OptionalCookieParamResourceTest extends JerseyTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


@Override @Override
Expand Down
Expand Up @@ -4,7 +4,7 @@
import com.google.common.base.Optional; import com.google.common.base.Optional;
import io.dropwizard.jersey.DropwizardResourceConfig; import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.jersey.params.UUIDParam; import io.dropwizard.jersey.params.UUIDParam;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import org.glassfish.jersey.internal.util.collection.MultivaluedStringMap; import org.glassfish.jersey.internal.util.collection.MultivaluedStringMap;
import org.glassfish.jersey.test.JerseyTest; import org.glassfish.jersey.test.JerseyTest;
import org.glassfish.jersey.test.TestProperties; import org.glassfish.jersey.test.TestProperties;
Expand All @@ -23,7 +23,7 @@


public class OptionalFormParamResourceTest extends JerseyTest { public class OptionalFormParamResourceTest extends JerseyTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


@Override @Override
Expand Down
Expand Up @@ -4,7 +4,7 @@
import com.google.common.base.Optional; import com.google.common.base.Optional;
import io.dropwizard.jersey.DropwizardResourceConfig; import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.jersey.params.UUIDParam; import io.dropwizard.jersey.params.UUIDParam;
import io.dropwizard.logging.LoggingFactory; import io.dropwizard.logging.BootstrapLogging;
import org.glassfish.jersey.test.JerseyTest; import org.glassfish.jersey.test.JerseyTest;
import org.glassfish.jersey.test.TestProperties; import org.glassfish.jersey.test.TestProperties;
import org.junit.Test; import org.junit.Test;
Expand All @@ -19,7 +19,7 @@


public class OptionalHeaderParamResourceTest extends JerseyTest { public class OptionalHeaderParamResourceTest extends JerseyTest {
static { static {
LoggingFactory.bootstrap(); BootstrapLogging.bootstrap();
} }


@Override @Override
Expand Down

2 comments on commit 847275a

@dknc
Copy link

@dknc dknc commented on 847275a Jul 31, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The method BootstrapLogging.bootstrap() is called in the constructor of Application class make sub class of Application not able to bootstrap logging in different log level other than Level.WARN, which make some INFO /DEBUG logs cannot be written to configured log appenders at the very early stage of application initialization.

@joschi
Copy link
Member

@joschi joschi commented on 847275a Jul 31, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dknc Please create an issue for that if you think that this is a problem that should be fixed.

Please sign in to comment.