我正在尝试构建一个使用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
答案 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.spark
或org.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>
我希望找到关于如何将其转换为使用属性格式的文档'不应该'太难。