2014-01-13 3 views
10

Ich mache eine Web-App mit Gradle. Ich habe log4j in dieser App verwendet. Als ich das Projekt erstelle ich Störung erhalte ...log4j: FEHLER Ein "org.apache.log4j.ConsoleAppender" -Objekt kann nicht einer "org.apache.log4j.Appender" -Variable zugewiesen werden

  • log4j: ERROR A "org.apache.log4j.ConsoleAppender" Objekt ist nicht übertragbar auf einen "org.apache.log4j.Appender" Variable.
  • log4j: ERROR Die Klasse "org.apache.log4j.Appender" von
  • log4j geladen wurde: ERROR [[email protected]] während Objekt vom Typ
  • log4j: Fehler " org.apache.log4j.ConsoleAppender "wurde von [[email protected]] geladen.
  • log4j: FEHLER Appender namens "stdout" konnte nicht instanziiert werden.

Ich habe immer noch keine gute Antwort gefunden. Und ich habe vergessen zu sagen, mein Projekt korrekt zu bauen und Log-Massagen korrekt anzuzeigen. Es funktioniert nicht nur bei Testklassen.

+0

Die 'ConsoleAppender'-Klasse wird irgendwie von einem Klassenlader von PowerMock geladen und nicht korrekt mit dem Basis-'Appender'-Typ verknüpft. – chrylis

Antwort

10

Das Hinzufügen dieser Annotation funktioniert für mich.

@PowerMockIgnore("org.apache.log4j.*") 
+0

Aber Sie unterdrücken diese Fehlermeldungen, die sie nicht beheben. –

3

Ihr Klassenpfad enthält 2 Kopien der log4j-Bibliothek. Ausschließen und erneut versuchen.

+0

Ich habe gerade log4j-1.2.17, slf4j-log4j12-1.7.5 mit slf4j-api-1.7.5 verwendet. Und slf4j ist Fassade. –

3

Es gibt eine klare Antwort here. : D

Wenn wir eine endgültige Methode und Slf4j Logger in unseren Klassen haben. Wir müssen in unserer Testklasse powermock verwenden. Aus diesem Grund müssen wir @MockPolicy (Slf4jMockPolicy.class) mit bestimmten Importen in der Testklasse verwenden, in der wir Powermock verwendet haben.

+0

Das OP sagt nicht, dass sie slf4j verwenden. Die Antwort von @ToYonos ist angemessener. –