Java log4j创建空日志文件

Java log4j创建空日志文件,java,log4j,Java,Log4j,这是我的log4j属性 log4j.rootLogger=All,consoleAppender, rollingFile log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout log4j.appender.consoleAppender.layout.ConversionPa

这是我的log4j属性

log4j.rootLogger=All,consoleAppender, rollingFile

log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender  
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout  
log4j.appender.consoleAppender.layout.ConversionPattern=[%t] %-5p %c %x - %m%n  


log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.File=D:/home/tim/logs/sparkStreaming.log
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n
log4j.appender.rollingFile.MaxFileSize=10MB
log4j.appender.rollingFile.MaxBackupIndex=5
log4j.appender.rollingFile.append=true
在下面的代码段中使用它

package rsvp;

import org.apache.spark.SparkConf;
import static org.apache.spark.sql.functions.col;
import static org.apache.spark.sql.functions.from_json;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.streaming.OutputMode;
import org.apache.spark.sql.streaming.StreamingQuery;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Service;

import rsvp.util.LoadResourceFile;

import org.apache.spark.sql.avro.package$;

@Service
@ComponentScan({ "rsvp.util" })
public class ProcessingService {
    
    
    private static Logger LOGGER = Logger.getLogger(ProcessingService.class); 
    

    @Autowired
    private final SparkConf sparkConf;
    
    @Autowired
    private LoadResourceFile AvroSchema;
    
    

    /*public ProcessingService() {
        this.sparkConf =  new SparkConf().setMaster("Local[*]").setAppName("RSVP");
    }
    */
    public ProcessingService(SparkConf sparkConf) {
        this.sparkConf = sparkConf;
    }

    public void run() {

        try {

            System.out.println("*************************STARTED******************************************************");
            SparkSession ss = SparkSession.builder().config(this.sparkConf).getOrCreate();
             ss.sparkContext().setLogLevel("ERROR");
            
            Dataset<Row> rsvpDT = ss.readStream().
                                    format(KafkaConstants.STREAM_FORMAT).
                                    option("kafka.bootstrap.servers", KafkaConstants.KAFKA_BROKERS).
                                    option("subscribe", KafkaConstants.KAFKA_TOPIC).
                                    option("failOnDataLoss", false).
                                    load();

            System.out.println("Print Schema");
            rsvpDT.printSchema();
            System.out.println("show values*******************************88");
            
        
            /*
             * Dataset<Row> rsvpAndTimestampDF =
             * rsvpDT//selectExpr("CAST(value AS STRING)");
             * .select(from_json(col("value").cast("string"),
             * RSVpSchema.RSVP_SCHEMA).alias("rsvp")) .alias("meetup").select("meetup.*");
             */
            
            Dataset<Row> rsvpAvroDF = rsvpDT.select(package$.MODULE$.from_avro(col("value").cast("BINARY"), LoadResourceFile.AvroSchema)
                                      .alias("rsvp")).alias("meetup").select("meetup.*");

            /*
             * Dataset<Row> mySqlTableDS = dbExtract.readstudentTable();
             * mySqlTableDS.show();
             */

            StreamingQuery query = rsvpAvroDF.writeStream().outputMode(OutputMode.Update()).format("console")
                    .option("path", KafkaConstants.CHECKPOINT_LOCATION)
                    .option("checkpointLocation", KafkaConstants.CHECKPOINT_LOCATION).option("truncate", false)
                    .start();
           query.awaitTermination();
            ss.stop();

        } catch (Exception e) {
            System.out.println("**************ERROR OCCURED*******************" + e.getMessage());
            LOGGER.error(e.getMessage());
        }
    }
}
包rsvp;
导入org.apache.spark.SparkConf;
导入静态org.apache.spark.sql.functions.col;
从_json导入静态org.apache.spark.sql.functions;
导入org.apache.spark.sql.Dataset;
导入org.apache.spark.sql.Row;
导入org.apache.spark.sql.SparkSession;
导入org.apache.spark.sql.streaming.OutputMode;
导入org.apache.spark.sql.streaming.StreamingQuery;
导入org.apache.log4j.Logger;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.context.annotation.ComponentScan;
导入org.springframework.stereotype.Service;
导入rsvp.util.LoadResourceFile;
导入org.apache.spark.sql.avro.package$;
@服务
@组件扫描({“rsvp.util”})
公共类处理服务{
私有静态记录器=Logger.getLogger(ProcessingService.class);
@自动连线
私人最终SparkConf SparkConf;
@自动连线
私有LoadResourceFile AvroSchema;
/*公共处理服务(){
this.sparkConf=new sparkConf().setMaster(“Local[*]”)。setAppName(“RSVP”);
}
*/
公共处理服务(SparkConf SparkConf){
this.sparkConf=sparkConf;
}
公开募捐{
试一试{
System.out.println(“**********************************************************************************************************************************************************************************************”);
SparkSession ss=SparkSession.builder().config(this.sparkConf.getOrCreate();
ss.sparkContext().setLogLevel(“错误”);
数据集rsvpDT=ss.readStream()。
格式(KafkaConstants.STREAM_格式)。
选项(“kafka.bootstrap.servers”,KafkaConstants.kafka_BROKERS)。
选项(“订阅”,KafkaConstants.KAFKA_主题)。
选项(“failOnDataLoss”,false)。
加载();
System.out.println(“打印模式”);
rsvpDT.printSchema();
System.out.println(“显示值***************************************************88”);
/*
*数据集rsvpAndTimestampDF=
*rsvpDT//selectExpr(“转换(值为字符串)”);
*.select(从_json(col(“value”).cast(“string”),
*RSVpSchema.RSVP_SCHEMA)。别名(“RSVP”)。别名(“meetup”)。选择(“meetup.*);
*/
数据集rsvpAvroDF=rsvpDT.select(包$.MODULE$。来自_avro(col(“value”).cast(“二进制”),LoadResourceFile.AvroSchema)
.别名(“rsvp”)。别名(“meetup”)。选择(“meetup.*);
/*
*数据集mySqlTableDS=dbExtract.readstudentTable();
*mysqltables.show();
*/
StreamingQuery query=rsvpAvroDF.writeStream().outputMode(outputMode.Update()).format(“控制台”)
.选项(“路径”,KafkaConstants.检查点位置)
.option(“checkpointLocation”,KafkaConstants.CHECKPOINT_LOCATION)。option(“truncate”,false)
.start();
query.waittermination();
ss.stop();
}捕获(例外e){
System.out.println(“****************发生错误**********************”+e.getMessage());
LOGGER.error(例如getMessage());
}
}
}
它正在创建空日志文件,为什么?我用错什么了吗?希望继续在同一日志文件中追加日志

请建议

更新:使用
try
catch
块添加了整个代码段

我已经在使用try-catch块,但仍然出现同样的问题,只有
.error
能够捕获日志并写入日志文件,但没有其他附加程序

有什么原因吗?

因为您使用ALL作为日志级别,所以问题不在于您的
LOGGER.debug()
离线代码


问题可能是因为您没有抛出异常。(如果您也添加try块会更好。)

首先,您使用
.debug(..)
记录错误,您应该将其更改为
.error(..)
。另外,请检查您是否已将日志记录级别相应地设置为
debug
(它可能被设置为INFO,这是部署的默认设置)@lunatikz,这样即使我在catch中使用.debug(..),它也不会捕获?这有什么问题?添加了有问题的代码,请选中try显式抛出异常,例如通过抛出新异常(“异常!!”);在try块的第一行中,我认为它根本没有捕获任何异常。另外,您可以尝试使用PropertyConfigurator.configure(“log4j.properties”)显式加载log4j.properties;初始化记录器对象之后。确保log4j.properties位于用于加载类(例如src/main/resources)的搜索路径中。我认为问题出在try块的第3行,您正在将日志级别更改为ERROR:
ss.sparkContext().setLogLevel(“ERROR”)