# Windows Event Logs: Monitoring, Alerts, and Compliance

> Learn how to monitor Windows Event Logs, set up alerts, and ensure compliance with proper log retention and archiving strategies.


Source: https://last9.io/blog/windows-event-logs/

Your Windows service stopped responding in production. The team needs answers, and the only clues are buried somewhere in the Application log. But that log has over 10,000 entries—most of them routine `Info` messages, generated in just the last two hours. What you need are the 3 `Error` events that explain what failed, when, and why.

Windows logs are detailed. They record almost everything that happens across the system: kernel events, service failures, authentication attempts, configuration changes. The challenge is knowing how to filter that volume of data fast—especially when you’re working against the clock.

This guide focuses on the production use of Windows logs. You’ll know how to filter events by type, source, or severity using PowerShell, recognize high-signal Event IDs, and build a setup that helps you monitor Windows logs at scale, without the overhead.

## What Are Windows Event Logs?

The Windows event log is the system’s built-in source of truth. It captures operational data from the OS, services, and applications, everything from driver failures and service crashes to authentication attempts and policy changes. If something important happens on a Windows machine, it likely shows up in the event log.

Each entry in a Windows event log includes structured metadata: timestamp, event ID, severity level, source, and a human-readable message. Logs are grouped by categories like `System`, `Application`, and `Security`, so you can zero in on specific issues without wading through unrelated noise.

Even if you're running containerized workloads or deploying in the cloud, Windows logs still matter. Many CI/CD pipelines, hybrid infrastructure setups, and legacy services rely on Windows log data to troubleshoot failures that metrics or traces might miss.

If you’re building out observability for Windows systems, understanding how the event log works and how to extract and monitor the right data is a solid starting point.

If you're running critical workloads on Windows Server, keeping an eye on performance metrics can save you from unexpected headaches—here’s a practical guide on [**Windows Server Monitoring**](https://last9.io/blog/windows-server-monitoring/).

## Where You’ll Find Windows Event Logs

Windows event logs are stored as `.evtx` files in:

```
C:\Windows\System32\winevt\Logs
```

But you’re unlikely to inspect them manually. Most workflows rely on tools like Event Viewer or PowerShell to interact with the Windows log system more efficiently.

**Use Event Viewer to Explore Logs**

Event Viewer is the built-in GUI for reading Windows logs. You can open it by:

- Pressing `Win + R`, typing `eventvwr.msc`, and hitting Enter
- Or going to: Start → Administrative Tools → Event Viewer

The left panel groups Windows event logs into categories:

- **Application** – Events from applications and services
- **Security** – Login attempts, access control, and audit events
- **System** – Kernel, driver, and OS-level events
- **Setup** – Installation and update events
- **Forwarded Events** – Logs collected from other machines

This structure helps isolate issues quickly. For example, you’ll find service crashes under Application, while authentication issues live in Security.

### Run PowerShell to Query Windows Logs

For automated workflows or deeper analysis, PowerShell is more flexible:

```powershell
# Show the latest 10 events from the System log
Get-EventLog -LogName System -Newest 10

# Show error-level Application events from the last 24 hours
Get-WinEvent -FilterHashtable @{
  LogName='Application'; Level=2; StartTime=(Get-Date).AddDays(-1)
}

# Filter Security log by event ID
Get-WinEvent -FilterHashtable @{
  LogName='Security'; ID=4624
}
```

> ⚠️ Use `Get-WinEvent` for production tasks. It supports more event log types, handles XML-based logs, and performs better than `Get-EventLog`, which is being phased out.

PowerShell gives you direct access to the Windows log pipeline, ideal for scripting alerts, exporting events, or plugging logs into a monitoring backend.

If you're managing both Windows and Linux systems, this guide on [Linux log file locations](https://last9.io/blog/linux-log-file-locations/) outlines where to find critical logs across distros, helpful when setting up unified monitoring across environments.

## Essential Windows Log Types for Debugging Production Issues

The Windows log system tracks a lot, but not every log is equally useful for debugging or monitoring. These are the core Windows event logs that developers and operators typically rely on:

### Application Log

This is where most software-level issues surface. If your web server throws an exception, your API gateway crashes, or your database connector fails silently, start here. Application logs record events generated by user-mode apps and services.

### System Log

The system log reflects what's happening behind the scenes, driver failures, hardware errors, service start/stop activity, and other OS-level events. If a service didn’t start after a reboot, or a hardware dependency failed, this Windows event log helps track it down.

### Security Log

Windows logs all security-related activity here: failed login attempts, privilege escalations, access control changes, and audit events. If you're responding to a suspected breach or just reviewing authentication issues, this is the log to inspect.

### Custom Application Logs

Some applications, like **SQL Server**, **IIS**, or **Exchange**, write to their own named Windows logs. These avoid polluting the main Application log and allow for more targeted monitoring. You can view them in Event Viewer under their categories, or query them directly using PowerShell.

> Tip: Use `Get-WinEvent -ListLog *` to list all available logs on a system, including app-specific ones.

Understanding log levels can help you cut through the noise and catch issues before they escalate, here’s a useful guide on [Log Levels: Answers to the Most Common Questions](https://last9.io/blog/log-levels-answers-to-the-most-common-questions/).

## How to Analyze Windows Log Data

Windows Event Logs contain detailed system and application-level information, but without context, it's just noise. Here's how to parse what's important.

### Event Structure

Each event entry includes structured metadata that helps with filtering, correlation, and root cause analysis:

| Component         | Details                                                                  |
| ----------------- | ------------------------------------------------------------------------ |
| **Level**         | Severity of the event — `Information`, `Warning`, `Error`, or `Critical` |
| **Date and Time** | Timestamp when the event was logged                                      |
| **Source**        | Application, service, or component that generated the event              |
| **Event ID**      | Numeric identifier for the event type                                    |
| **Task Category** | Subclassification provided by the source                                 |
| **Description**   | Human-readable message (includes parameters or error codes, if any)      |

### Common Event IDs

Some Event IDs show up frequently and are worth recognizing. Here’s a reference table for quick identification:

| Event ID | Description                                 |
| -------- | ------------------------------------------- |
| **4624** | Successful user logon                       |
| **4625** | Failed logon attempt                        |
| **7036** | Service state change (started or stopped)   |
| **1074** | User or process initiated system restart    |
| **6005** | Event Log service startup                   |
| **6006** | Event Log service shutdown                  |
| **41**   | System rebooted unexpectedly (Kernel-Power) |
| **1001** | Windows Error Reporting (WER) report logged |

## Practical Tips for Log Management

Once you're collecting logs, the next challenge is using them effectively. Here's how to turn all that noise into something useful in your workflow.

**1\. Filtering: Zero in on What Matters**

The Event Viewer has basic filtering, but PowerShell gives you far more control. Example: finding all error-level events from a specific app in the last hour:

```powershell
$oneHourAgo = (Get-Date).AddHours(-1)
Get-WinEvent -FilterHashtable @{
    LogName = 'Application'
    Level = 2  # Error
    StartTime = $oneHourAgo
    ProviderName = 'Your Application Name'
}
```

This helps you skip the GUI and go straight to actionable logs, especially during incident response.

**2\. Custom Views: Save Your Common Searches**

If you're regularly hunting for the same types of logs, like failed logins or app crashes, create a custom view in Event Viewer:

- Open **Event Viewer**
- Click **Create Custom View**
- Set filters like time range, log name, severity level, and source
- Save it with a clear name like `"Auth Failures"` or `"App Exceptions"`

Consider it as a saved search that you can revisit whenever needed.

**3\. Log Forwarding: Centralize Everything**

If you’re working with multiple Windows servers, setting up Windows Event Forwarding (WEF) helps you centralize logs to a single collector box.

**On the collector server:**

```powershell
wecutil qc /q
```

- Enables the Windows Event Collector service
- `/q` skips confirmation prompts

**On each source server:**

```powershell
winrm quickconfig
```

- Configures Windows Remote Management (WinRM)
- Starts the service and allows the machine to send logs remotely

Once this is in place, you’ll have one place to monitor and query logs from across your environment.

Managing log retention effectively ensures you have the right data when you need it—without unnecessary storage costs. Here’s a practical guide on [**Log Retention**](https://last9.io/blog/log-retention/).

## How to Integrate Event Logs With Your DevOps Workflow

A Windows log doesn’t just belong in a postmortem. To make it useful, you need to bake it into your day-to-day workflow, before something breaks.

Here’s how to do that.

### Monitor and Alert With the Right Tools

You’ve got a few options depending on your stack and how much control you want:

### Last9 — Built for Observability at Scale

If you're managing Windows systems in production, logs are only useful when they connect to the bigger picture. [Last9](https://last9.io/) provides a structured way to work with Windows logs alongside metrics and traces, no separate pipelines, no format mismatches.

- **Ingest Windows event logs natively** using OpenTelemetry, with full support for log fields like `EventID`, `Task Category`, and `User SID`
- **Query logs, metrics, and traces in one place** using PromQL-style expressions
- **Correlate log events with upstream or downstream service behavior**, so failures aren't investigated in isolation
- **Track alerts through SLOs**, not just thresholds, so you're responding to real impact, not every noisy warning

Last9 is designed to handle high-volume, high-cardinality telemetry, whether it’s from Windows services, infrastructure, or application-level instrumentation.

#### Windows Event Forwarding (WEF) – Native Log Aggregation

Built into Windows, [WEF](https://learn.microsoft.com/en-us/windows/security/operating-system-security/device-management/use-windows-event-forwarding-to-assist-in-intrusion-detection) collects event logs from multiple machines and ships them to a central collector.

- Uses Windows Remote Management (WinRM) for transport
- Ideal for on-prem setups with no external log shipper
- Lightweight and secure, but best suited for environments already running Active Directory
- Set up event subscriptions to avoid collecting junk data

#### Azure Monitor – Cloud-Based Log Monitoring

If you're using Azure VMs or a hybrid infrastructure, [Azure Monitor](https://learn.microsoft.com/en-us/azure/azure-monitor/fundamentals/overview) gives you centralized visibility.

- Collects logs using the Log Analytics Agent
- Uses Kusto Query Language (KQL) for filtering, alerting, and dashboarding
- Integrates with Azure Security Center for threat detection
- Good option when extending observability across both cloud and on-prem

### Automate Responses to Repeated Failures

You can also use PowerShell to automate reactions to certain event patterns, like restarting a flaky service:

```powershell
$failEvents = Get-WinEvent -FilterHashtable @{
    LogName = 'System'
    ID = 7031  # Service crashed unexpectedly
    ProviderName = 'Service Control Manager'
} -MaxEvents 5

if ($failEvents.Count -ge 3) {
    Restart-Service -Name "ProblemService" -Force
    Send-MailMessage -To "you@company.com" `
        -Subject "Service Restarted Automatically" `
        -Body "Service 'ProblemService' was restarted after 3+ failures."
}
```

- 7031 is the event ID for an unexpected service termination
- Script checks for 3+ failures, then restarts the service
- Sends an alert so the incident isn’t missed

> Tip: Combine this with Task Scheduler or a scheduled runbook in Azure Automation to make it part of your resilience strategy.

### Integrate Windows Logs with Your Developer Tools

Once you’ve set up basic monitoring and filtering, the next step is to connect Windows logs with the tools your team already uses.

Here’s how you can plug log events into developer workflows, so alerts, checks, and actions happen automatically, without needing to open Event Viewer.

**Send Critical Windows Events to Slack**

You don’t need a full-blown logging system just to get alerted when a service crashes. A simple PowerShell script can watch for service failures and send a message to your team’s Slack channel:

```powershell
# Monitor for service crashes and send alert to Slack
$webhook = "https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"

$criticalEvents = Get-WinEvent -FilterHashtable @{
    LogName = 'System'
    ID = 7031
    StartTime = (Get-Date).AddMinutes(-5)
} -ErrorAction SilentlyContinue

if ($criticalEvents) {
    $message = @{
        text = "Service crash detected on $env:COMPUTERNAME"
        attachments = @(@{
            color = "danger"
            fields = @(@{
                title = "Event Details"
                value = $criticalEvents[0].Message
                short = $false
            })
        })
    } | ConvertTo-Json -Depth 3

    Invoke-RestMethod -Uri $webhook -Method Post -Body $message -ContentType 'application/json'
}
```

Use Task Scheduler to run this every few minutes in production environments.

**Add Log Checks to GitHub Actions**

If you deploy Windows workloads, you can verify service health as part of your CI/CD pipeline. This example uses GitHub Actions to check for system-level service failures after a deployment:

```yaml
# .github/workflows/deployment-health-check.yml
name: Post-Deploy Health Check
on:
  deployment_status:
    types: [success]

jobs:
  health-check:
    runs-on: windows-latest
    steps:
      - name: Check for post-deployment failures
        run: |
          $failures = Get-WinEvent -FilterHashtable @{
            LogName = 'System'
            ID = 7031, 7034
            Level = 2, 3
            StartTime = (Get-Date).AddMinutes(-10)
          } -ErrorAction SilentlyContinue

          if ($failures) {
            echo "::error::Windows service failures detected"
            $failures | ForEach-Object { echo "::warning::$($_.Message)" }
            exit 1
          }
```

This stops broken deployments from moving forward and surfaces problems early.

**Open GitHub Issues for High-Priority Events**

You can also raise tickets automatically for recurring or high-severity errors. This example uses PowerShell to create a GitHub issue when a critical Windows event is detected:

```powershell
function New-GitHubIssueFromEvent {
    param($Event, $RepoToken)

    $issueBody = @"
**Event ID:** $($Event.Id)
**Source:** $($Event.ProviderName)
**Time:** $($Event.TimeCreated)
**Server:** $env:COMPUTERNAME

**Details:**
$($Event.Message)
"@

    $issue = @{
        title = "Service failure on $($Event.ProviderName)"
        body = $issueBody
        labels = @("bug", "infrastructure", "windows")
    } | ConvertTo-Json

    Invoke-RestMethod -Uri "https://api.github.com/repos/your-org/your-repo/issues" `
        -Method Post -Body $issue -Headers @{ Authorization = "token $RepoToken" }
}
```

You can use this to track recurring issues and tie logs directly into incident or backlog workflows.

Use [Last9 MCP](https://last9.io/mcp/) to bring production Windows logs, metrics, and traces into your local environment, so you can inspect real event data alongside your code and reproduce issues with full system context.

## 3 Common Windows Log Location Issues (and How to Fix Them)

Working with logs on Windows often starts with this simple question: _Where are my logs?_

But as you dig deeper, you may run into issues that are less about location and more about size, detail, or configuration. Here’s a breakdown of three common problems and how to troubleshoot each.

### 1\. “I Can't Find My Logs”

If your logs aren't where they should be, or aren’t showing up at all, start with the essentials:

#### Check if the Event Log service is running

Use PowerShell to confirm the service is active:

```powershell
Get-Service EventLog
```

If it's not running, restart it:

```powershell
Restart-Service EventLog
```

#### Verify available disk space

Logs may silently stop being written if the system drive is full:

```powershell
Get-Volume C
```

Look for `SizeRemaining` and clear space if necessary.

#### Inspect log retention and rotation settings

Windows may be configured to overwrite logs too quickly:

```powershell
Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\Application
```

Look for `MaxSize` and retention-related values. To increase log capacity:

```powershell
Limit-EventLog -LogName Application -MaximumSize 2GB
```

### 2\. “My Logs Are Too Big—or Too Small”

If logs are consuming too much space or not retaining enough history, you can adjust their maximum size.

#### Increase the log size (example: System log)

```powershell
Limit-EventLog -LogName System -MaximumSize 2GB
```

#### View current log settings

```powershell
Get-EventLog -List
```

This shows each log’s size, retention policy, and number of entries—helpful for tuning log size and cleanup intervals.

### 3\. “My Logs Aren’t Detailed Enough”

By default, some services only emit basic operational logs. For deeper insight, enable debug or analytical channels.

#### Enable debug logging for a Windows service

```powershell
wevtutil.exe sl Microsoft-Windows-YourService/Debug /e:true
```

Replace `YourService` with the actual provider name. This turns on a secondary debug channel, if available.

#### Enable analytical logging

Analytical logs are high-volume, low-level traces. To enable them:

```powershell
wevtutil.exe set-log "Microsoft-Windows-YourService/Analytical" /enabled:true
```

You’ll often need to use Event Viewer > View > Show Analytic and Debug Logs to see them.

Use `Eventvwr.msc` for a GUI-driven view, but rely on PowerShell for repeatable checks and automation. Misconfigured logs can silently hinder diagnostics, especially on shared environments or production servers, so it's worth validating these settings periodically.

If you want to see how logs are structured for efficient search and parsing, check out our post on [log format standards](https://last9.io/blog/log-format/) (JSON, XML, key-value) for practical examples and considerations.

## How to Retain Windows Event Logs Without Running Into Storage Problems

Retaining Windows event logs is all about meeting compliance requirements, supporting audits, detecting security incidents, and enabling forensic analysis. But keeping everything forever leads to another problem: storage bloat.

Here’s how to strike a balance between retention and efficiency, without losing critical data.

### Back Up and Clear Logs Programmatically

Before clearing logs to free up space, always archive them.

```powershell
# Export System log with timestamped filename
$logName = "System"
$timestamp = Get-Date -Format 'yyyyMMdd'
$backupPath = "C:\Backups\${logName}_$timestamp.evtx"

wevtutil.exe epl $logName $backupPath  # Back up the log
wevtutil.exe cl $logName               # Clear the log after backup
```

This ensures:

- Logs are retained for audit purposes.
- New logs can be written without hitting max log size limits.
- Backups are timestamped for easy tracking.

> Pro tip: Automate this script with Task Scheduler to run daily or weekly.

### Long-Term Archiving for Compliance

If you're subject to regulations like HIPAA, PCI-DSS, or SOC 2, log retention isn’t optional. You’ll need structured, secure, and queryable storage for years of historical data.

#### Option 1: Use a SIEM System

Security Information and Event Management (SIEM) platforms like:

- [Last9](https://last9.io/)
- [IBM QRadar](https://www.ibm.com/qradar)
- [Elastic Security](https://www.elastic.co/security)

These tools ingest and index logs from multiple sources, including Windows event logs. They help with:

- Real-time alerting and anomaly detection.
- Long-term log storage with retention policies.
- Audit trails and compliance-ready reporting.

#### Option 2: Archive to Azure Log Analytics

For hybrid or cloud-native infrastructure, Azure Monitor with [Log Analytics](https://learn.microsoft.com/en-us/azure/azure-monitor/logs/log-analytics-tutorial) is a solid choice.

Benefits:

- Forward logs from on-prem or cloud-hosted Windows instances.
- Store securely in Azure Storage with geo-redundancy.
- Analyze with Kusto Query Language (KQL).
- Set up alerts based on specific Windows log events or thresholds.

> Azure also supports retention policies and can archive to cold storage for cost savings.

### Automate Log Archival With PowerShell

If you’re managing logs at scale and not using a SIEM, automation becomes critical.

Example daily archival script:

```powershell
$logs = @("System", "Application", "Security")
$backupRoot = "C:\Backups"

foreach ($log in $logs) {
    $file = "${backupRoot}\${log}_$(Get-Date -Format 'yyyyMMdd').evtx"
    wevtutil.exe epl $log $file
    wevtutil.exe cl $log
}
```

Schedule this via Task Scheduler or Group Policy to ensure consistency across environments.

### Choose the Right Log Retention Policy

Every system and organization is different, but here’s what to evaluate when setting a policy:

| Factor            | Consideration                                                                          |
| ----------------- | -------------------------------------------------------------------------------------- |
| **Compliance**    | How long does your industry require logs to be retained? (e.g., 1–7 years)             |
| **Storage**       | Do you have space for uncompressed logs, or will you need compression or cold storage? |
| **Security**      | Are archived logs encrypted and access-controlled?                                     |
| **Searchability** | Can you retrieve logs quickly for an audit or incident review?                         |

If logs are hard to access, they’re useless during a crisis. Prioritize formats and tools that make querying fast and reliable.

## Windows Log Quick Reference

**Essential Commands**

```powershell
# Last 10 errors from any log
Get-WinEvent -FilterHashtable @{Level=2; StartTime=(Get-Date).AddHours(-24)} -MaxEvents 10

# Service failures today
Get-WinEvent -FilterHashtable @{LogName='System'; ID=7031; StartTime=(Get-Date).Date}

# Failed logins last hour
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4625; StartTime=(Get-Date).AddHours(-1)}

# List all logs
Get-WinEvent -ListLog * | Select LogName, RecordCount
```

**Critical Event IDs**

| ID       | Log         | Meaning           |
| -------- | ----------- | ----------------- |
| **4625** | Security    | Failed login      |
| **7031** | System      | Service crashed   |
| **41**   | System      | Unexpected reboot |
| **1001** | Application | App crash         |

**Log Locations**

| Log         | PowerShell Name | Path                                               |
| ----------- | --------------- | -------------------------------------------------- |
| System      | `System`        | `C:\Windows\System32\winevt\Logs\System.evtx`      |
| Application | `Application`   | `C:\Windows\System32\winevt\Logs\Application.evtx` |
| Security    | `Security`      | `C:\Windows\System32\winevt\Logs\Security.evtx`    |

**Emergency Checks**

```powershell
# What caused last reboot?
Get-WinEvent -FilterHashtable @{LogName='System'; ID=1074,41} -MaxEvents 3

# Service won't start?
Get-WinEvent -FilterHashtable @{LogName='System'; ID=7000} -MaxEvents 5

# Recent app crashes?
Get-WinEvent -FilterHashtable @{LogName='Application'; ID=1000} -MaxEvents 5
```

Making sense of SIEM logs can be tricky, but the right approach helps turn data into actionable insights—here’s a practical guide on [**SIEM Logs**](https://last9.io/blog/siem-logs/).

## Conclusion

Effective Windows log analysis depends on more than just collecting events; it’s about turning them into answers quickly. That’s hard to do when you're switching between Event Viewer, dashboards, and CLI tools just to understand what failed, when, and why.

Manual correlation across logs, metrics, and traces often adds friction, especially when your Windows services run alongside distributed workloads.

Last9 simplifies this process:

- Automatically connects log events with application traces and infrastructure metrics
- Helps you track down the root cause, across systems, in one view
- Keeps full log detail: `EventID`, `Task Category`, `User SID`, custom labels, without sampling
- Supports log-based SLOs, so alerts reflect actual user impact, not just raw errors

[Explore how Last9 handles Windows logs](https://last9.io/docs/logs/) without agents or complex pipelines. Or [book time with us](https://last9.io/schedule-demo/) to see how it fits into your stack.

If you've any of your own Windows log tricks, [join our Discord community](https://discord.com/invite/W8gMppQC4b) and share with us – we're all learning together.

## FAQs

### How far back do Windows event logs go?

By default, Windows keeps logs until they reach their maximum size (typically 20MB for System and Application logs). When logs fill up, Windows overwrites the oldest events. You can adjust this with PowerShell:

```powershell
# See current retention settings
Get-EventLog -List

# Increase size to prevent early overwriting
Limit-EventLog -LogName Application -MaximumSize 4GB
```

For critical systems, consider setting up log forwarding or scheduled archiving to preserve logs indefinitely.

### Can I read Windows event logs without admin rights?

For most logs, you'll need administrative privileges. However, some applications write to logs that regular users can access. If you need to grant non-admin users access to specific logs:

```powershell
# Grant read access to a user
wevtutil set-log Security /ca:'O:BAG:SYD:(A;;0x1;;;SY)(A;;0x1;;;BA)(A;;0x1;;;AU)(A;;0x1;;;YourDomain\YourUser)'
```

But be careful – security logs contain sensitive information.

### How do I correlate events across multiple servers?

Your options include:

- Set up Windows Event Forwarding to a central collector
- Use Azure Monitor to aggregate logs in the cloud
- Implement a third-party SIEM solution
- Use PowerShell to query multiple servers:

```powershell
Invoke-Command -ComputerName Server1, Server2, Server3 -ScriptBlock {
    Get-WinEvent -FilterHashtable @{LogName='System'; ID=1074} -MaxEvents 5
} | Select-Object PSComputerName, TimeCreated, ID, Message
```

Time synchronization is crucial here – make sure all servers use the same NTP source.

### What's the difference between .evt and .evtx file formats?

- **.evt**: Legacy format used in Windows XP/Server 2003
- **.evtx**: Modern XML-based format used since Windows Vista/Server 2008

The newer .evtx format offers better performance, more detailed information, and larger log sizes. If you're dealing with older .evt files, use the `Get-WinEvent` cmdlet with the `-Path` parameter to read them.

### Can I export logs for analysis in other tools?

Absolutely. Export options include:

```powershell
# Export to XML
Get-WinEvent -LogName System -MaxEvents 100 | Export-Clixml -Path C:\Temp\events.xml

# Export to CSV
Get-WinEvent -LogName System -MaxEvents 100 | Select TimeCreated, ID, LevelDisplayName, Message | Export-Csv -Path C:\Temp\events.csv -NoTypeInformation

# Export raw EVTX
wevtutil epl System C:\Temp\system.evtx
```

Many analysis tools like Last9, ELK Stack, and Graylog can ingest these formats.
