You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Scala代码中修改日志控制台日志格式?现有代码未生效

Scala 修改Log4j控制台日志格式的正确方法

你的代码没生效主要有两个核心问题:格式字符串的日期部分写法错误,以及缺少配置激活步骤,下面是修正后的实现:

修正后的代码

import org.apache.log4j.{ConsoleAppender, Level, Logger, PatternLayout}

val rootLogger: Logger = Logger.getRootLogger
// 日期部分必须用 %d{...} 包裹,这是Log4j识别日期格式的关键
val pattern = "%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"
val layout = new PatternLayout(pattern)
// 激活Layout配置,这一步是生效的必要操作
layout.activateOptions()

val consoleAppender = new ConsoleAppender(layout)
// 激活Appender配置
consoleAppender.activateOptions()

rootLogger.removeAllAppenders()
rootLogger.addAppender(consoleAppender)
rootLogger.setLevel(Level.ERROR)

关键修正点说明

  • 格式字符串修正:原代码里的日期部分直接写yyyy-MM-dd HH:mm:ss,Log4j无法识别为日期格式,必须用%d{}包裹,才会解析为日志发生的时间。
  • 添加激活配置步骤:Log4j的PatternLayout和ConsoleAppender需要调用activateOptions()初始化配置,否则设置的格式不会生效。
  • 清空原有Appender:removeAllAppenders()能清空默认的旧Appender,避免新格式和旧格式冲突。

如果你的项目使用Log4j 2.x(API与1.x不同),可以参考以下实现:

import org.apache.logging.log4j.{LogManager, Level}
import org.apache.logging.log4j.core.LoggerContext
import org.apache.logging.log4j.core.appender.ConsoleAppender
import org.apache.logging.log4j.core.layout.PatternLayout

val context = LogManager.getContext(false).asInstanceOf[LoggerContext]
val config = context.getConfiguration

val patternLayout = PatternLayout.newBuilder()
  .withPattern("%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n")
  .build()

val consoleAppender = ConsoleAppender.newBuilder()
  .setLayout(patternLayout)
  .setName("ConsoleAppender")
  .build()

consoleAppender.start()
config.addAppender(consoleAppender)

val rootLogger = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME)
rootLogger.addAppender(consoleAppender, Level.ERROR, null)
context.updateLoggers(config)

内容的提问来源于stack exchange,提问作者changeLater

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 11:22:39