Python Log File Analyzer Example
A log file analyzer is a good beginner project because it combines several useful Python skills in one script.
In this example, you will read a log file, look for important lines such as ERROR, WARNING, and INFO, count them, and print a simple summary.
This page focuses on building one practical script. If you want a separate lesson on file handling, see how to read a file in Python or how to read a file line by line in Python.
Quick working version #
If you want a simple version first, start with this:
from collections import Counter
log_file = "app.log"
counts = Counter()
with open(log_file, "r", encoding="utf-8") as file:
for line in file:
line = line.strip()
if "ERROR" in line:
counts["ERROR"] += 1
elif "WARNING" in line:
counts["WARNING"] += 1
elif "INFO" in line:
counts["INFO"] += 1
print("Log summary")
for level, total in counts.items():
print(f"{level}: {total}")
This version:
- opens the file
- reads it one line at a time
- checks each line for common log levels
- counts matches
- prints the totals
Next, let’s build it step by step so the code is easier to understand.
What this example builds #
This script will:
- Read a text log file line by line
- Look for common log levels such as
ERROR,WARNING, andINFO - Count how many times each level appears
- Print a simple report at the end
What a log file is #
A log file is a text file created by a program.
It usually stores messages about what the program did, such as:
- normal activity
- warnings
- errors
For example, a program might write messages like:
INFO: User logged inWARNING: Disk space is lowERROR: Could not connect to database
Skills used in this project #
This example uses several basic Python skills:
- Opening a file with
open() - Looping through lines with a
forloop - Cleaning text with
strip() - Checking text with the
inoperator - Counting values with a dictionary or
Counter - Printing readable output
If dictionaries are new to you, see Python dictionaries explained. If loops are new, see Python for loops explained.
Sample log file input #
Create a file named app.log in the same folder as your Python script.
Put this sample text inside it:
INFO: Application started
INFO: User login successful
WARNING: Disk space is getting low
ERROR: Could not connect to server
INFO: Retrying connection
ERROR: Connection failed again
This file contains:
- several
INFOlines - one
WARNINGline - two
ERRORlines
Build the analyzer step by step #
1. Open the file safely #
Use with open(...) to open the file.
log_file = "app.log"
with open(log_file, "r", encoding="utf-8") as file:
for line in file:
print(line)
Why this works:
open()opens the file for reading"r"means read modeencoding="utf-8"is a safe choice for text fileswithcloses the file automatically when finished
2. Loop over each line #
A file can be looped through directly.
log_file = "app.log"
with open(log_file, "r", encoding="utf-8") as file:
for line in file:
print(repr(line))
Using repr(line) helps you see hidden characters like \n.
3. Remove extra newline characters with strip() #
Each line usually ends with a newline character. You can remove it with strip().
log_file = "app.log"
with open(log_file, "r", encoding="utf-8") as file:
for line in file:
line = line.strip()
print(line)
This makes the line cleaner before you check its content.
4. Check whether a line contains ERROR, WARNING, or INFO #
Now check each cleaned line with the in operator.
log_file = "app.log"
with open(log_file, "r", encoding="utf-8") as file:
for line in file:
line = line.strip()
if "ERROR" in line:
print("Found an error line")
elif "WARNING" in line:
print("Found a warning line")
elif "INFO" in line:
print("Found an info line")
Why use elif here?
Because one line should only be counted once. Using elif stops Python after the first matching condition.
5. Increase the correct count #
Now let’s count each type of line.
This version uses Counter, which is a convenient counting tool.
from collections import Counter
log_file = "app.log"
counts = Counter()
with open(log_file, "r", encoding="utf-8") as file:
for line in file:
line = line.strip()
if "ERROR" in line:
counts["ERROR"] += 1
elif "WARNING" in line:
counts["WARNING"] += 1
elif "INFO" in line:
counts["INFO"] += 1
print(counts)
After reading the sample log file, counts will contain:
Counter({'INFO': 3, 'ERROR': 2, 'WARNING': 1})
6. Print the final totals #
Here is the full script:
from collections import Counter
log_file = "app.log"
counts = Counter()
total_lines = 0
with open(log_file, "r", encoding="utf-8") as file:
for line in file:
total_lines += 1
line = line.strip()
if "ERROR" in line:
counts["ERROR"] += 1
elif "WARNING" in line:
counts["WARNING"] += 1
elif "INFO" in line:
counts["INFO"] += 1
print("Log summary")
print(f"Total lines: {total_lines}")
for level in ["ERROR", "WARNING", "INFO"]:
print(f"{level}: {counts[level]}")
Expected output #
With the sample app.log file shown earlier, the output will be:
Log summary
Total lines: 6
ERROR: 2
WARNING: 1
INFO: 3
This output is simple and easy to compare with the input file.
Useful beginner improvements #
Once the basic version works, you can try small improvements.
Count all lines, not only matched lines #
The full example already shows total_lines += 1.
This helps you compare:
- total lines in the file
- matched log level lines
Store matching lines in separate lists #
You can save the actual lines, not just the totals.
error_lines = []
warning_lines = []
with open("app.log", "r", encoding="utf-8") as file:
for line in file:
line = line.strip()
if "ERROR" in line:
error_lines.append(line)
elif "WARNING" in line:
warning_lines.append(line)
This is useful if you want to print or save the problem lines later.
Find the first error line #
You can stop as soon as the first error is found.
first_error = None
with open("app.log", "r", encoding="utf-8") as file:
for line in file:
line = line.strip()
if "ERROR" in line:
first_error = line
break
print(first_error)
Ignore letter case with upper() #
Some files may use error, Error, or ERROR.
To handle that, convert each line to one case first:
from collections import Counter
counts = Counter()
with open("app.log", "r", encoding="utf-8") as file:
for line in file:
line = line.strip()
upper_line = line.upper()
if "ERROR" in upper_line:
counts["ERROR"] += 1
elif "WARNING" in upper_line:
counts["WARNING"] += 1
elif "INFO" in upper_line:
counts["INFO"] += 1
print(counts)
Ask the user for the file name with input() #
You can make the script more flexible:
from collections import Counter
log_file = input("Enter the log file name: ")
counts = Counter()
with open(log_file, "r", encoding="utf-8") as file:
for line in file:
line = line.strip()
if "ERROR" in line:
counts["ERROR"] += 1
elif "WARNING" in line:
counts["WARNING"] += 1
elif "INFO" in line:
counts["INFO"] += 1
print("Log summary")
for level in ["ERROR", "WARNING", "INFO"]:
print(f"{level}: {counts[level]}")
How this page is different from related pages #
This page is a full example project.
It is not a complete lesson on every file or string method used here.
For deeper explanations, use these related pages:
- how to read a file in Python
- how to read a file line by line in Python
- Python
open()function explained - Python
strip()string method
Common mistakes #
Here are some common problems beginners run into with this kind of script.
The log file name is wrong #
If the file does not exist, Python raises a FileNotFoundError.
Example:
with open("wrong_name.log", "r", encoding="utf-8") as file:
pass
If that happens, check:
- the spelling of the file name
- that the file is in the correct folder
- your current working directory
See also: FileNotFoundError: No such file or directory fix
The path points to a folder instead of a file #
Make sure log_file contains a file path, not just a folder name.
The log levels use different letter case #
If your file contains error instead of ERROR, your checks may fail.
Fix this by converting the line first:
upper_line = line.upper()
You forget to strip newline characters #
Without strip(), the line may contain extra spaces or \n.
That can make debugging harder.
You use if for every check instead of elif #
If you use separate if statements, one line could be counted more than once in some cases.
Using elif makes the checks exclusive.
The file contains unexpected text format #
Some log files may have extra spaces, timestamps, or different wording.
If needed, print each line while testing so you can see the real format.
FAQ #
Do I need a special library to analyze a log file? #
No. A basic analyzer can use only built-in Python tools such as open(), loops, strings, and dictionaries.
Should I read the whole file at once? #
For beginners, reading line by line is usually better. It uses less memory and is easier to understand.
What if my log file uses lowercase words like error? #
Convert each line to one case first, such as line.upper(), then check for ERROR.
Can this example search for dates or usernames too? #
Yes. You can check each line for other patterns and store extra counts or matching lines.
See also #
- How to read a file in Python
- How to read a file line by line in Python
- Python
open()function explained - Python
strip()string method - Python dictionaries explained
- Python for loops explained
- FileNotFoundError: No such file or directory fix
Try extending this project next:
- count dates in the log
- extract all error lines
- save the summary to a new file