为什么Kotlin的循环(for)与org.slf4j.Logger无法正常工作?

问题描述 投票:-2回答:1

在文件夹src / resources /我的Kotlin项目中,我有文件pairs_ids.txt。

这里的代码:这是一个属性文件:

key=value

所有行数均为1389。

这里代码逐行读取此文件的内容。

import org.slf4j.LoggerFactory
private val logger = LoggerFactory.getLogger("Exchange")

 private var allSymbolsIDsMap: Map<String, String> = mapOf()    
 val pairsIDs = getResourceAsText("/pairs_ids.txt")
 allSymbolsIDsMap = pairsIDs.split(",").associate {
 val (left, right) = it.split("=")
          left to right.toString()
 }
 logger.info("allSymbolsIDsMap_size = " + allSymbolsIDsMap.size)
 var countAllSymbolHandler = 0
 for ((key, value) in allSymbolsIDsMap) {
   countAllSymbolHandler++
   logger.info("countAllSymbolHandler = $countAllSymbolHandler")
}

private fun getResourceAsText(path: String): String {
    return object {}.javaClass.getResourceAsStream(path).bufferedReader().use { it.readText() }
}

结果:

开始项目:

allSymbolsIDsMap_size = 1389
Start project - "countAllSymbolHandler =" print 1113 times

再次启动项目:

allSymbolsIDsMap_size = 1389
"countAllSymbolHandler =" print 242 times

如果用简单的logger.info替换println那么成功的工作。伯爵总是1389。

为什么使用logger循环(for)无法正常工作?

kotlin slf4j
1个回答
0
投票

尝试:

override fun run(configuration: AppConfig?, environment: Environment?) {
        val logger = LoggerFactory.getLogger(this::class.java)
        javaClass.getResourceAsStream("/pairs_ids.txt").bufferedReader().use { reader -> reader.readLines() }.forEach { line -> logger.info(line) }
    }

在使用输入/输出流时,使用Kotlin的use扩展方法,并在use块内进行所有处理。

这将处理所有流的打开和关闭,以便没有泄漏,或忘记关闭/冲洗等。

© www.soinside.com 2019 - 2024. All rights reserved.