2013-07-24 21 views
9

Sto cercando di utilizzare una classe di layout personalizzata per la registrazione di logback di gioco framework 2.0.play framework logback layout personalizzato

In primo luogo, ho definito una classe di layout personalizzato in utils:

package utils; 

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

Nel mio file conf/logging.xml, ho messo:

<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> 

ma quando ho eseguito all'interno di gioco, ad esempio, ,

play run 

vedo:

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) 

Così, la riproduzione non può trovare la classe di layout che ho creato. Come inserisco la classe di layout sul percorso della classe?

Si noti che ho provato anche in scena il progetto via,

play clean compile stage 

e poi ha iniziato il progetto tramite

target/start 

Avvio del progetto dalla versione pacchettizzata, non vedo i dispersi sopra errore di classe. Tuttavia, non vedo mai alcun output, né vedo nemmeno la classe costruita. Ho aggiunto dichiarazioni System.out.println per ogni costruttore per questa classe come segue, per verificare se la classe era in costruzione:

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); 
    } 

Sono un novizio di logback configurazione, quindi sono sicuro che Mi manca qualcosa di ovvio. Grazie per l'aiuto.

risposta

-1

Per quanto mi riguarda, ho visto questo errore quando accendere il mio app come segue:

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

Ma ho passato che utilizzando avvio invece di correre

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

Tuttavia, questo ha creato un altro problema ; non è stato possibile trovare application.conf. Non importava che ho specificato il file come così:

-Dconfig.resource=local.conf 

Dopo aver rinominato local.conf al application.conf, la mia classe layout personalizzato per la registrazione viene trovato e utilizzato.