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