ServletContext.log () не входит - PullRequest
       34

ServletContext.log () не входит

4 голосов
/ 08 апреля 2011

Выход журнала моего RemoteServiceServlet (GWT) не отображается в лог-файлах или стандартном выводе при использовании getServletContext().log("anything");

Для внедрения зависимостей я использую Google Guice . Для собственного вывода журнала я использую slf4j-jdk14 . Я пробовал это в Tomcat 6, а также в Jetty (GWT devmode).

Чтобы было понятно, мой сервлет:

@Singleton
public class MyServiceServlet extends RemoteServiceServlet implements MyService {

    private static final Logger log = LoggerFactory.getLogger(MyServiceServlet.class);
    private final ADependency dep;

    @Inject
    public MyServiceServlet(ADependency dep) {
        getServletContext().log("THIS IS NOT SHOWN IN MY LOGS");
        log.error("THIS IS SHOWN IN MY LOGS");
        this.dep = dep;
    }
}

Итак, где я могу найти отсутствующий вывод журнала или где я могу настроить ServletContext-Log?

1 Ответ

4 голосов
/ 04 июля 2012

Поведение метода ServletContext.log зависит от контейнера. Метод, который я использовал, чтобы сделать его непротиворечивым, состоит в том, чтобы обернуть ServletConfig, переданный через init (), чтобы создать обернутый ServletContext, который использует наш собственный предоставленный регистратор (в данном случае Slf4j).

public class Slf4jServletConfigWrapper implements ServletConfig {
  private final ServletConfig config;
  private final Logger log;

  public Slf4jServletConfigWrapper(Logger log, ServletConfig config) {
    this.log = log;
    this.config = config;
  }

  public ServletContext getServletContext() {
    return new ServletContext() {
      public void log(String message, Throwable throwable) {
        log.info(message, throwable);
      }

      public void log(Exception exception, String msg) {
        log.info(msg, exception);
      }

      public void log(String msg) {
        log.info(msg);
      }
...

Полный код Slf4jServletConfigWrapper.java

В вашем сервлете переопределите метод init () для использования оболочки ServletConfig

public void init(final ServletConfig config) throws ServletException {
  super.init(new Slf4jServletConfigWrapper(log, config));
}
...