Scala按天写入日志文件

4 篇文章 0 订阅

如果希望把每天出错的信息写入日志文件,每天新建一个文件。

package test.scala
import java.io.{File, FileWriter}
import java.text.SimpleDateFormat
import java.util.{Calendar, Date}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future

object LogWriter {
  private val logDirectory = new File("D:\\data\\log")
  private val dateFormat = new SimpleDateFormat("yyyy-MM-dd")
  private val lock = new Object()

  private def createLogFile(): File = {
    val currentDate = dateFormat.format(new Date())
    val logFileName = s"$currentDate.log"
    val logFile = new File(logDirectory, logFileName)

    if (!logDirectory.exists()) {
      logDirectory.mkdirs()
    }

    if (!logFile.exists()) {
      logFile.createNewFile()
    }

    logFile
  }

  def writeLog(content: String): Unit = {
    lock.synchronized {
      val logFile = createLogFile()
      val currentTime = Calendar.getInstance().getTime
      val dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
      val formattedTime = dateFormat.format(currentTime)
      //val logLine = s"$content\n"
      val logLine = s"$formattedTime: $content\n"

      val fileWriter = new FileWriter(logFile, true)
      fileWriter.write(logLine)
      fileWriter.close()
    }
  }

  def main(args: Array[String]): Unit = {
    LogWriter.writeLog("日志测试一")
    LogWriter.writeLog("日志测试二")
    LogWriter.writeLog("日志测试三")
  }
}

在这里插入图片描述

日志文件内容:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例代码,演示如何使用 Delta Lake 结合 Spark Structured Streaming 实现小文件合并: ```scala import org.apache.spark.sql.SparkSession import org.apache.spark.sql.functions._ // 创建 SparkSession val spark = SparkSession.builder() .appName("DeltaLakeWithStructuredStreamingExample") .master("local[*]") .getOrCreate() // 设置日志级别 spark.sparkContext.setLogLevel("WARN") // 定义输入路径和输出路径 val inputPath = "/path/to/input/directory" val outputPath = "/path/to/output/directory" // 创建 Structured Streaming 数据流 val stream = spark.readStream .option("header", "true") .option("maxFilesPerTrigger", 1) .csv(inputPath) // 将数据写入 Delta Lake 表中 val query = stream .writeStream .format("delta") .partitionBy("date") .option("checkpointLocation", "/path/to/checkpoint/directory") .trigger(processingTime = "10 seconds") .start(outputPath) // 合并小文件 spark.read.format("delta").load(outputPath).repartition(1) .write.format("delta").mode("overwrite").option("dataChange", "true").save(outputPath) // 启动数据流 query.awaitTermination() ``` 在这个示例中,我们首先创建了一个 SparkSession,并设置日志级别。我们还定义了输入路径和输出路径。 接下来,我们使用 `readStream` 方法从输入路径中读取 CSV 文件,并将数据写入 Delta Lake 表中。这里我们使用了 `writeStream` 方法,并指定了 Delta 格式、分区字段、检查点位置、触发时间等选项。这样,每当有新的 CSV 文件写入输入路径时,Spark Structured Streaming 就会自动读取并将其写入 Delta Lake 表中。 然后,我们使用 `repartition` 方法来将数据进行重新分区,这可以帮助我们合并小文件。最后,我们使用 `write` 方法将合并后的数据重新写入输出路径中。在这里,我们使用了 `overwrite` 模式,并设置了 `dataChange` 选项为 `true`,表示数据已经更改。 最后,我们启动数据流,并等待其完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值