2013-07-24 16 views
9

Ich versuche, eine benutzerdefinierte Layout-Klasse für Play Framework 2.0 Logback-Protokollierung zu verwenden.play framework logback benutzerdefiniertes Layout

Zuerst habe ich eine benutzerdefinierte Layout-Klasse definiert in Paket utils:

package utils; 

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

In meiner conf/logging.xml Datei, habe ich:

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

aber wenn ich im Spiel laufen, zB

,
play run 

ich sehe:

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) 

So kann Play die von mir erstellte Layoutklasse nicht finden. Wie lege ich die Layoutklasse auf den Klassenpfad?

Bitte beachte, dass ich auch versucht, über das Projekt Staging

play clean compile stage 

und begann dann das Projekt über

target/start 

das Projekt von der verpackten Version starten, sehe ich nicht die oben fehlt Klassenfehler. Ich sehe aber auch keine Ausgabe, noch sehe ich die Klasse konstruiert. Ich fügte hinzu, System.out.printin Aussagen zu jedem Konstruktor für diese Klasse wie folgt, um zu überprüfen, ob die Klasse gebaut wurde:

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

ich ein Neuling bin Konfiguration zu logback, also bin ich sicher, dass ich Ich vermisse etwas Offensichtliches. Danke für die Hilfe.

Antwort

-1

Für mich ich diesen Fehler sah, als meine app Anheizen wie folgt:

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

Aber ich habe Vergangenheit, die durch statt Lauf mit Start

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

Allerdings erstellt das ein anderes Problem ; das Sagen von application.conf konnte nicht gefunden werden. Es spielte keine Rolle, dass ich die Datei als so angegeben:

-Dconfig.resource=local.conf 

Nach der Umbenennung local.conf zu application.conf, für die Protokollierung meine benutzerdefinierte Layout-Klasse gefunden und verwendet.