KOTLIN · 파일/IO
로그 파일 분석
시퀀스를 활용하여 대용량 로그 파일을 메모리 효율적으로 분석합니다.
파일/IO고급log-analysissequenceregexfile-processing
핵심 설명
시퀀스를 활용하여 대용량 로그 파일을 메모리 효율적으로 분석합니다.
Kotlin code
import java.io.File
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
data class LogEntry(
val timestamp: String,
val level: String,
val message: String
)
fun parseLogLine(line: String): LogEntry? {
val regex = Regex("""^[(d{4}-d{2}-d{2} d{2}:d{2}:d{2})][(w+)]s(.+)$""")
return regex.matchEntire(line)?.let {
val (ts, level, msg) = it.destructured
LogEntry(ts, level, msg)
}
}
fun analyzeLog(lines: Sequence<String>) {
val entries = lines.mapNotNull { parseLogLine(it) }
val buffer = mutableListOf<LogEntry>()
entries.forEach { buffer.add(it) }
// 레벨별 통계
val byLevel = buffer.groupBy { it.level }
println("=== 로그 레벨 통계 ===")
byLevel.forEach { (level, logs) ->
println(" $level: ${logs.size}건")
}
// 에러 메시지 Top 5
println("
=== ERROR 메시지 ===")
buffer.filter { it.level == "ERROR" }
.groupBy { it.message.take(50) }
.entries.sortedByDescending { it.value.size }
.take(5)
.forEach { println(" ${it.value.size}건: ${it.key}") }
}
fun main() {
// 시뮬레이션 데이터
val logData = listOf(
"[2024-01-15 10:00:00][INFO] 서버 시작",
"[2024-01-15 10:00:01][DEBUG] 설정 로드",
"[2024-01-15 10:00:05][ERROR] DB 연결 실패",
"[2024-01-15 10:00:10][ERROR] DB 연결 실패",
"[2024-01-15 10:00:15][WARN] 메모리 부족",
)
analyzeLog(logData.asSequence())
}학습 팁
실제 파일 분석 시 File("log.txt").useLines { analyzeLog(it) }로 호출하면 대용량 파일도 스트리밍 처리됩니다.
주의할 점
시퀀스를 두 번 순회하면 두 번째 순회가 실패할 수 있습니다. 여러 집계가 필요하면 리스트로 변환하거나 한 번의 순회로 모든 통계를 수집하세요.
자주 묻는 질문
로그 파일 분석란 무엇인가요?
시퀀스를 활용하여 대용량 로그 파일을 메모리 효율적으로 분석합니다.
로그 파일 분석 학습 시 주의할 점은 무엇인가요?
시퀀스를 두 번 순회하면 두 번째 순회가 실패할 수 있습니다. 여러 집계가 필요하면 리스트로 변환하거나 한 번의 순회로 모든 통계를 수집하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.