Home / Blog / SIEM and Tools

Beginner SIEM and Tools

Log Levels Explained: What INFO, WARN and ERROR Mean in Logs

A beginner guide to log severity levels in syslog, Python, Log4j and Windows, why they differ between products, and why quiet INFO events can still matter.

Every log line carries a label such as INFO, WARN or ERROR that shows how important the software thinks the message is. This guide explains what those labels mean, why they differ between products, and why the quiet ones can still matter in an investigation.

TopicLog severity levels
You will meet them inSyslog, application logs, Windows Event Viewer, SIEM
Syllabus linkCySA+ CS0-003, objective 1.1
>

Scenario: Your dashboard is filtered to "Error and above" and shows 12 results, all about a print spooler on SRV-PRINT-02. Meanwhile, at 02:13, a new service was installed on WS-114 and logged as Information. Which one deserves your attention first, and why could the quiet one be the more important?

What is a log level?

A log level (also called a severity level) is a label added to a log message by the software that wrote it. It answers one simple question: how serious does the developer think this event is?

Levels exist so that people can filter. A busy server can produce millions of lines a day, and most of them are routine. Levels let an engineer say "show me only the problems" or "show me everything while I fix this bug".

Most software also uses the level as a threshold. If a program is set to log at WARNING, it writes WARNING and anything more severe, and it quietly drops the rest. Python's standard logging module works this way, and its default threshold is WARNING, so debug and info messages do not appear unless someone turns them on.

The syslog scale: eight levels, 0 to 7

Syslog is the standard way many Linux systems, network devices and firewalls send log messages. Its format is defined in RFC 5424. An RFC (Request for Comments) is a numbered document that describes an internet standard.

Every syslog message starts with a PRI value (short for priority). The PRI combines two things: the facility, which says which part of the system sent the message (for example the authentication system), and the severity, which says how serious it is. Facility tells you the origin. Severity tells you the urgency.

NumberNameMeaning
0EmergencySystem is unusable
1AlertAction must be taken immediately
2CriticalCritical conditions
3ErrorError conditions
4WarningWarning conditions
5NoticeNormal but significant condition
6InformationalInformational messages
7DebugDebug-level messages
!

Watch out: in syslog, the lower the number, the more severe the message. Level 0 is the worst and level 7 is the quietest. Many other tools count the opposite way.

Other products use different scales

Syslog is only one scale. Applications and operating systems each bring their own list, and the names and the order are not identical. You cannot assume that "ERROR" in one product means exactly the same as "Error" in another.

SourceLevels, most severe firstWorth knowing
Syslog (RFC 5424)Emergency, Alert, Critical, Error, Warning, Notice, Informational, DebugNumbered 0 to 7, lower is worse
Apache Log4j 2 (Java logging)FATAL, ERROR, WARN, INFO, DEBUG, TRACEFATAL is the most severe. OFF and ALL are settings, not message levels
Python loggingCRITICAL, ERROR, WARNING, INFO, DEBUGNumbered 50, 40, 30, 20, 10, so higher is worse. FATAL is an alias for CRITICAL
Windows Event LogCritical, Error, Warning, Information, VerboseThe Security log records Audit Success and Audit Failure instead

Notice the trap: Python counts upwards as things get worse, while syslog counts downwards. Always check which way a product runs before you build a filter such as "level greater than 3".

+

Tip: if your notes list TRACE, DEBUG, INFO, WARN, ERROR and FATAL, that is the Log4j style list, and FATAL is the top of it. It is a common convention, not a universal rule.

How to think about levels on shift

Instead of memorising every name, group levels into three bands. This makes any product easier to read.

Band 1

Detail

Very chatty messages meant for developers fixing a fault. Usually switched off in production.

DEBUG, TRACE, Verbose
Band 2

Normal running

Things that happened as expected: a service started, a user signed in, a job finished.

INFO, Notice, Information
Band 3

Trouble

Something failed or might fail soon. Start here when a system is unhealthy.

WARN, ERROR, CRITICAL, FATAL

Band 3 is where system administrators look when something is broken. Band 2 is where a lot of security evidence hides, because attackers use normal features. A new service being installed, a successful sign in from a strange place and a scheduled task being created are all "normal running" events as far as the software is concerned.

In the scenario above, the print spooler errors are noisy and probably harmless. The new service on WS-114 is logged at Information level, yet it could be a persistence mechanism (a way for an attacker to survive a reboot). Severity is the software's opinion. Risk is your judgement.

What a level cannot tell you

Whether it is an attackAn ERROR can be a broken printer. An INFO can be an intruder logging in.
Whether levels are consistentOne developer logs a failed login as INFO, another as WARN. There is no enforcement.
Whether you see everythingIf a source only logs at WARNING and above, the INFO events never exist for you to search.

Filtering by level: four short searches

You do not need complex queries to use levels. Here are four small examples. The host names and values are placeholders, so adjust them to your environment.

Linux: journalctl

journalctlBash
journalctl -p err --since "1 hour ago"

This reads the systemd journal. The -p err option means priority "err" and anything more severe, so you also get crit, alert and emerg. --since limits the output to the last hour.

Windows: PowerShell

Get-WinEventPowerShell
Get-WinEvent -FilterHashtable @{ LogName = 'System'; Level = 1,2; StartTime = (Get-Date).AddHours(-1) } |
  Select-Object TimeCreated, Id, ProviderName, LevelDisplayName |
  Format-Table -AutoSize

The first line reads the System log. In this filter, Level 1 means Critical and Level 2 means Error, and StartTime keeps the last hour only. The second line picks the columns to show, and the third prints them as a table.

Microsoft Sentinel: KQL

KQL (Kusto Query Language) is the query language used in Microsoft Sentinel, a cloud SIEM (Security Information and Event Management) tool.

SentinelKQL
Syslog
| where TimeGenerated > ago(1h)
| where SeverityLevel in ("emerg", "alert", "crit", "err")
| summarize Count = count() by Computer, ProcessName
| sort by Count desc

Line 1 chooses the Syslog table. Line 2 keeps the last hour. Line 3 keeps only the four most severe syslog levels. Line 4 counts messages per machine and process, and line 5 shows the noisiest first.

Splunk: SPL

SPL (Search Processing Language) is the query language used in Splunk. The index, sourcetype and field names depend on how your organisation set Splunk up.

SplunkSPL
index=app_logs sourcetype=webapp level=ERROR earliest=-24h
| stats count by host
| sort -count

The first line searches one index for ERROR events from the last 24 hours. The second counts them for each host. The third sorts the biggest count to the top.

Common mistakes to avoid

!

Watch out: filtering a SIEM to "errors only" is convenient, but it hides most successful attacker actions. Use levels to organise your reading, not to decide what is safe.

  • Check which way the scale runs before filtering on a number.
  • Confirm what threshold each log source is set to, so you know what is never sent.
  • Remember that debug logging can record sensitive details, so treat debug logs carefully if you ever find them in a SIEM.
  • Do not trust the label alone. Read the message, the account, the host and the time.
  • Make sure clocks agree across systems, or your timeline of events will not line up.

What to study next

CompTIA's CySA+ (CS0-003) exam objectives place log ingestion, time synchronisation and logging levels in the first domain, Security Operations. Check the current objectives document on CompTIA's website for the exact wording, since exam versions change.

  • Time synchronisation with NTP (Network Time Protocol) and why wrong clocks break investigations.
  • How logs travel from a device to a SIEM: agents, syslog forwarding and batch uploads.
  • Windows Event IDs, such as 7045 for a new service and 4625 for a failed logon.
  • Practise: open Event Viewer on a lab machine, filter the System log by Error, then by Information, and compare what each shows.

Key takeaways

  1. A log level is the software's own label for how serious a message is.
  2. Scales differ: syslog runs 0 to 7 with 0 the worst, Python runs 10 to 50 with 50 the worst, and Log4j puts FATAL at the top.
  3. Group levels into detail, normal running and trouble to read any product quickly.
  4. Attacker activity often appears at INFO level, so never filter to errors only and assume you are safe.
  5. Always check the source's threshold, because levels below it are never logged.

Log levels are one of the first things worth learning, because they shape every search you will write. Open a log in your own lab today, find the level field, and see how many different values it uses.

Written by Ben, Cybersecurity Student

Keep going

More in SIEM and Tools

IntermediateSIEM and Tools

How to Run Cross Tenant Sentinel Queries in an MSP SOC

Set up Azure Lighthouse access, write workspace() queries that label every client and learn the limits of cross workspace rules before you run a multi tenant SOC on them.

9 Sep 20269 min read