문제: 로그 파일에서 에러 분석
여러 개의 서버 로그 파일이 주어집니다.
각 로그 파일에는 여러 줄의 로그 항목이 있으며, 각 로그 항목은 타임스탬프, 로그 레벨(ERROR, INFO, WARNING 등), 그리고 메시지를 포함합니다.
각 로그 파일의 경로가 리스트로 주어질 때, ERROR 로그 항목의 개수를 세고 가장 최근의 ERROR 로그 메시지를 출력하는 프로그램을 작성하세요.
입력 형식
로그 파일은 다음과 같은 형식을 가집니다.
로그 파일 경로의 리스트 :
(예: log_files = ["server1.log", "server2.log", "server3.log"])
로그 파일 내용:
server1.log:
2023-07-07 12:00:00 ERROR Something went wrong
2023-07-07 12:01:00 INFO User logged in
2023-07-07 12:02:00 ERROR Another error occurred
server2.log:
2023-07-07 12:03:00 INFO System running smoothly
2023-07-07 12:04:00 WARNING Low disk space
2023-07-07 12:05:00 ERROR Disk full
server3.log:
2023-07-07 12:06:00 ERROR Network issue
2023-07-07 12:07:00 INFO User logged out
출력 형식
- 총 ERROR 로그 항목의 개수
- 가장 최근의 ERROR 로그 메시지
총 ERROR 로그 항목의 개수: 4
가장 최근의 ERROR 로그 메시지: Network issue
코드
각 로그 파일을 순회하면서 로그 항목을 파싱합니다.
ERROR 로그 항목의 타임스탬프를 비교하여 가장 최근의 메시지를 찾습니다.
import os
def analyze_logs(log_files):
error_count = 0
latest_error_message = ""
latest_error_time = ""
for log_file in log_files:
with open(log_file, 'r') as file:
for line in file:
# 3번 자름, 총 4개의 요소를 가지는 리스트가 생성됨
parts = line.strip().split(" ",3)
timestamp = parts[0] + " " + parts[1]
level = parts[2]
message = parts[3] if len(parts) > 3 else ""
# 에러일 떄, 최근 메시지의 업데이트
if level == "ERROR":
error_count += 1
if timestamp > latest_error_time:
latest_error_time = timestamp
latest_error_message = message
return error_count, latest_error_message
# 파일 경로 입력
log_files = ["server1.log", "server2.log", "server3.log"]
error_count, latest_error_message = analyze_logs(log_files)
# 출력
print(f"총 ERROR 로그 항목의 개수: {error_count}")
print(f"가장 최근의 ERROR 로그 메시지: {latest_error_message}")
풀이
에러코드를 필터링하고 에러코드와 에러메세지를 분류하여 출력하는 문제입니다.
split(" ", 3) 함수의 두번째 옵션을 통해서
parts = ['2024-08-10', '12:46:00', 'ERROR', 'Unable to connect to database']
값을 가지게 됩니다.
message = parts[3] if len(parts) > 3 else "" 을 통해
메세지가 없을 경우 빈문자 처리를 합니다.
'Programming > CodingTest' 카테고리의 다른 글
[HackerRank] Sales by Match (양말 판매상) Implementation 문제 (0) | 2024.08.17 |
---|---|
[Data] CSV 파일의 데이터 병합 문제 (0) | 2024.08.14 |
[Data] 로그 파일 집계 문제 (0) | 2024.08.11 |
[이코테] [5] 다이나믹 프로그래밍 ( 동적계획법 ) (0) | 2024.08.10 |
[이코테] [4] 정렬-Sort (0) | 2024.08.10 |