如何在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
相关产品推荐
相关产品推荐

