Spark:从自定义日志中分离出火花日志

时间:2016-10-24 12:08:51

标签: scala apache-spark log4j

我正在尝试构建一个使用log4j制作日志文件的应用程序。日志文件的位置通过 log4j.properties 文件提供。

到目前为止,它运行良好,但我想将火花日志与我从代码中生成的日志分开。或者至少只是在日志文件中打印我的日志消息。

有没有办法做到这一点?

log4j.properties

# Root logger option
log4j.rootLogger=INFO, stdout, file
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.rolling.RollingFileAppender
log4j.appender.file.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.rollingPolicy.fileNamePattern=../log/abc%d{yyyyMMdd_HHmmss}.log
    log4j.appender.file.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy
log4j.appender.file.TriggeringPolicy.maxFileSize=5000000
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

2 个答案:

答案 0 :(得分:1)

您可以轻松为不同的定义不同的追加程序,以便以不同的方式记录或使用不同的log4j追加者。

log4j.properties的示例:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=INFO, A1, sparkappender

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t]%-5p %c %x - %m%n

# org.apache.spark package will log TRACE logs
log4j.logger.org.apache.spark=TRACE, sparkappender
log4j.logger.org.spark_project.jetty=ERROR, sparkappender
log4j.additivity.org.apache.spark=false

log4j.appender.sparkappender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.sparkappender.datePattern='-'dd'.log'
log4j.appender.sparkappender.File=log/spark-logs.log
log4j.appender.sparkappender.layout=org.apache.log4j.PatternLayout
log4j.appender.sparkappender.layout.ConversionPattern=%-4r [%t]%-5p %c %x - %m%n

上述文件的快速说明:

使用sparkappender appender log4j会将所有日志记录到文件log/spark-logs.log中。包org.apache.sparkorg.apache_project.jetty中未由类生成的所有日志都将记录到控制台中。这些包也有不同的日志级别,但是相同的log4j appender - sparkappender

在您的示例中,您可以保留file日志追加器并定义日志级别,并将sparkappender定义为log4j.logger,如上例所示。

答案 1 :(得分:0)

不幸的是我不确定如何使用属性文件。我只使用xml配置了log4j。

但是在XML中,您可以将以下内容添加到“标准”配置中:

<appender name="spark-file" class="org.apache.log4j.FileAppender">
    <param name="File" value="spark.log" />
    <param name="Append" value="true" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
</appender>

这定义了一个将日志输出到名为spark.log的文件的appender。 然后使用它:

<logger name="org.apache.spark" additivity="false">
    <level value="INFO" />
    <appender-ref ref="spark-file" />
</logger>

我希望找到关于如何将其转换为使用属性格式的文档'不应该'太难。