2016-10-15 2 views
3

Ich versuche, eine scala-basierte JAR-Datei in Eclipse zu erstellen, die log4j verwendet, um Protokolle zu erstellen. Es wird perfekt in der Konsole ausgegeben, aber wenn ich versuche, log4j.properties zu verwenden, um es in eine Protokolldatei zu schreiben, passiert nichts.Scala: Log in Datei mit log4j schreiben

Die Projektstruktur ist wie folgt:

Maven project with scala nature

loggerTest.scala

package scala.n*****.n**** 

import org.apache.log4j.Logger 

object loggerTest extends LogHelper { 
    def main(args : Array[String]){ 
    log.info("This is info"); 
    log.error("This is error"); 
    log.warn("This is warn"); 
    } 
} 

trait LogHelper { 
    lazy val log = Logger.getLogger(this.getClass.getName) 
} 

log4j.properties

# Root logger option 
log4j.rootLogger=WARN, stdout, file 

# Redirect log messages to console 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

# Redirect log messages to a log file 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=/home/abc/test/abc.log 
log4j.appender.file.encoding=UTF-8 
log4j.appender.file.MaxFileSize=2kB 
log4j.appender.file.MaxBackupIndex=1 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>loggerTest</groupId> 
<artifactId>loggerTest</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<name>loggerTest</name> 
<description>loggerTest</description> 

<repositories> 
    <repository> 
    <id>scala-tools.org</id> 
    <name>Scala-tools Maven2 Repository</name> 
    <url>http://scala-tools.org/repo-releases</url> 
    </repository> 
    <repository> 
    <id>maven-hadoop</id> 
    <name>Hadoop Releases</name> 
    <url>https://repository.cloudera.com/content/repositories/releases/</url> 
    </repository> 
    <repository> 
    <id>cloudera-repos</id> 
    <name>Cloudera Repos</name> 
    <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url> 
    </repository> 
</repositories> 

<pluginRepositories> 
    <pluginRepository> 
    <id>scala-tools.org</id> 
    <name>Scala-tools Maven2 Repository</name> 
    <url>http://scala-tools.org/repo-releases</url> 
    </pluginRepository> 
</pluginRepositories> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
</properties> 

<build> 
    <plugins> 
     <!-- mixed scala/java compile --> 
     <plugin> 
      <groupId>org.scala-tools</groupId> 
      <artifactId>maven-scala-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>compile</id> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
        <phase>compile</phase> 
       </execution> 
       <execution> 
        <id>test-compile</id> 
        <goals> 
         <goal>testCompile</goal> 
        </goals> 
        <phase>test-compile</phase> 
       </execution> 
       <execution> 
        <phase>process-resources</phase> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>fully.qualified.MainClass</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
    <pluginManagement> 
     <plugins> 
      <!--This plugin's configuration is used to store Eclipse m2e settings 
       only. It has no influence on the Maven build itself. --> 
      <plugin> 
       <groupId>org.eclipse.m2e</groupId> 
       <artifactId>lifecycle-mapping</artifactId> 
       <version>1.0.0</version> 
       <configuration> 
        <lifecycleMappingMetadata> 
         <pluginExecutions> 
          <pluginExecution> 
           <pluginExecutionFilter> 
            <groupId>org.scala-tools</groupId> 
            <artifactId> 
             maven-scala-plugin 
            </artifactId> 
            <versionRange> 
             [2.15.2,) 
            </versionRange> 
            <goals> 
             <goal>compile</goal> 
             <goal>testCompile</goal> 
            </goals> 
           </pluginExecutionFilter> 
           <action> 
            <execute></execute> 
           </action> 
          </pluginExecution> 
         </pluginExecutions> 
        </lifecycleMappingMetadata> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

<dependencies> 
<dependency> 
<groupId>org.apache.spark</groupId> 


<artifactId>spark-core_2.10</artifactId> 
    <version>1.5.0</version> 
    </dependency> 

    <dependency> 
    <groupId>org.apache.spark</groupId> 
    <artifactId>spark-hive_2.10</artifactId> 
    <version>1.5.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-sql_2.10</artifactId> 
     <version>1.5.0</version> 
    </dependency> 
     <dependency> 
      <groupId>org.scala-lang</groupId> 
      <artifactId>scala-library</artifactId> 
      <version>2.10.4</version> 
     </dependency> 
     </dependencies> 

    </project> 

Wenn ich es als Maven Build ausführe, erzeugt es eine JAR-Datei im "Ziel" -Ordner.

Ich kopiere das Glas zu/home/abc/test

ich laufen, dass Glas in Funken Shell mit dem Befehl

$ spark-submit --class scala.n*****.n*****.loggerTest loggerTest-0.0.1-SNAPSHOT.jar 

Die Konsole in Ordnung kommen, aber es sollte in/home in eine Datei schreiben/abc/log, was nicht der Fall ist.

Könnte jemand bitte helfen?

+0

können Sie nur versuchen, mit diesem ? log4j.rootLogger = WARN, Datei – BDR

+3

Ich denke Spark hat seine eigenen Log4j-Eigenschaften, die Ihre eigenen überschreiben, da Sie dies über 'spark-submit' ausführen. Versuchen Sie, Ihren Code unabhängig auszuführen (zB 'java -jar loggerTest-0.0.1-SNAPSHOT.jar' oder' scala loggerTest-0.0.1-SNAPSHOT.jar'), um zu sehen, wie Ihre Konfiguration funktioniert, und lesen Sie dann das Protokollieren mit Spark- submit: http://spark.apache.org/docs/latest/configuration.html#configuring-logging –

Antwort

2

Hallo, während Sie bereitstellen Sie Anwendung sollten Sie log4j-Datei für Testamentsvollstrecker und Treiber definieren als

spark-submit --class MAIN_CLASS --driver-java-options "-Dlog4j.configuration=file:PATH_OF_LOG4J" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:PATH_OF_LOG4J" --master MASTER_IP:PORT JAR_PATH 

Für mehr Details und Schritt für Schritt Lösung folgt können Sie diesen Link überprüfen https://blog.knoldus.com/2016/02/23/logging-spark-application-on-standalone-cluster/

+0

Die Zeile funktionierte aber nur, wenn ich die Eigenschaftendatei in dasselbe Verzeichnis wie das jar legte. Aber ich kann nicht den Pfad der Props-Datei angeben, die sich in src/main/resources befindet. Könntest du mir dabei helfen? – Amber

+0

Sie implementieren Ihre Anwendung mit Client-Modus Soo sollten Sie immer Java-Optionen durch Argumente nicht gesetzt in Ihrem Funken conf setzen, weil bis diese jvm gestartet wird und wenn Sie es durch Argumente übergeben Sie log4j in Ihrem Jar –

+0

zugreifen können Sie es setzen Irgendwo und gib Pfad davon ist nicht ok? –

Verwandte Themen