2013-07-24 2 views
9

Я пытаюсь использовать собственный класс макета для ведения журнала регистрации в фреймворке 2.0.play framework logback custom layout

Во-первых, я определил класс пользовательского макета в пакет утилитами:

package utils; 

public class MonitorLayoutForLogback extends LayoutBase<ILoggingEvent> { 
... 
} 

В моем файле конф/logging.xml, я поставил:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 
      <layout class="utils.MonitorLayoutForLogback"> 
          <param name="programName" value="uowVisualizer" /> 
          <param name="serviceGroup" value="shared" /> 
          <param name="serviceIdentifier" value="uowVisualizer" /> 
      </layout> 
     </encoder> 
    </appender> 

, но когда я бегу в игре, например, ,

play run 

Я вижу:

14:20:18,387 |-ERROR in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Could not create component [layout] of type [utils.MonitorLayoutForLogback] java.lang.ClassNotFoundException: utils.M 
onitorLayoutForLogback 
    at java.lang.ClassNotFoundException: utils.MonitorLayoutForLogback 
    at  at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at  at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at  at java.security.AccessController.doPrivileged(Native Method) 
    at  at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at  at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at  at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at  at sbt.PlayCommands$$anonfun$53$$anonfun$55$$anon$2.loadClass(PlayCommands.scala:535) 
    at  at ch.qos.logback.core.util.Loader.loadClass(Loader.java:124) 
    at  at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.begin(NestedComplexPropertyIA.java:100) 
    at  at ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:276) 
    at  at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:148) 
    at  at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:130) 
    at  at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:50) 
    at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:157) 
    at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:143) 
    at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:106) 
    at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:56) 
    at  at play.api.Logger$$anonfun$configure$8.apply(Logger.scala:248) 
    at  at play.api.Logger$$anonfun$configure$8.apply(Logger.scala:247) 
    at  at scala.Option.map(Option.scala:145) 
    at  at play.api.Logger$.configure(Logger.scala:247) 
    at  at play.api.Application$class.$init$(Application.scala:266) 

Итак, игра не может найти класс макета, который я создал. Как поместить класс макета в путь класса?

Обратите внимание, что я также попытался устроив проект через,

play clean compile stage 

, а затем начал проект по

target/start 

Запуск проекта из упакованной версии, я не вижу выше отсутствующий класса. Тем не менее, я также никогда не вижу выхода, и даже не вижу, как построил класс. Я добавил заявление System.out.println для каждого конструктора для этого класса, как следует, чтобы проверить, был ли строится класс:

public MonitorLayoutForLogback() { 
     System.out.println("MonitorLayoutForLogback Constructor without arguments"); 
    } 

    public MonitorLayoutForLogback(String program) { 
     System.out.println("MonitorLayoutForLogback Constructor with program "+program); 
     _program = program; 
    } 

    public MonitorLayoutForLogback(String program, String sGroup, String sid) { 
     System.out.println("MonitorLayoutForLogback Constructor with program "+program+" sGroup "+sGroup+" sid "+sid); 
     _program = program; 
     MonitoringInfo.setServiceGroup(sGroup); 
     MonitoringInfo.setServiceIdentifier(sid); 
    } 

Я новичок в Logback конфигурации, поэтому я уверен, «Нет ничего очевидного. Спасибо за помощь.

ответ

-1

Для меня, я видел эту ошибку при стрельбе мое приложение следующим образом:

./activator -Dhttp.port=9000 -Dconfig.resource=local.conf -jvm-debug 9999 run 

Но я мимо, что с помощью запуска вместо запуска

./activator -Dhttp.port=9000 -Dconfig.resource=local.conf -jvm-debug 9999 start 

Однако это создало еще одну проблему ; не удалось найти application.conf. Это не имеет значения, что я указал файл, так:

-Dconfig.resource=local.conf 

После переименования local.conf в application.conf, мой пользовательский класс макет для регистрации найден и используется.