Files
azure-examples/GrafanaBlazor/BlazorApp/Components/Pages/Logs.razor
2026-01-28 10:29:49 -06:00

132 lines
3.7 KiB
Plaintext

@page "/logs"
@inject ILogger<Logs> Logger
<PageTitle>Logs</PageTitle>
<h1>Logs Demo</h1>
<p>This page helps you generate different types of log entries for testing your Grafana setup.</p>
<div class="row mt-4">
<div class="col-md-4">
<div class="card">
<div class="card-body">
<h5 class="card-title">Information</h5>
<p>Generate informational log entries.</p>
<button class="btn btn-info" @onclick="@(() => LogMessage(LogLevel.Information))">
Log Information
</button>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-body">
<h5 class="card-title">Warning</h5>
<p>Generate warning log entries.</p>
<button class="btn btn-warning" @onclick="@(() => LogMessage(LogLevel.Warning))">
Log Warning
</button>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-body">
<h5 class="card-title">Error</h5>
<p>Generate error log entries.</p>
<button class="btn btn-danger" @onclick="@(() => LogMessage(LogLevel.Error))">
Log Error
</button>
</div>
</div>
</div>
</div>
<div class="row mt-4">
<div class="col-md-6">
<div class="card">
<div class="card-body">
<h5 class="card-title">Structured Logging</h5>
<p>Generate structured log with custom properties.</p>
<button class="btn btn-primary" @onclick="LogStructuredMessage">
Log Structured Data
</button>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-body">
<h5 class="card-title">Bulk Logs</h5>
<p>Generate multiple log entries at once.</p>
<button class="btn btn-secondary" @onclick="GenerateBulkLogs">
Generate 10 Logs
</button>
</div>
</div>
</div>
</div>
<div class="alert alert-success mt-4">
<strong>Total logs generated this session:</strong> @logCount
</div>
@code {
private int logCount = 0;
private void LogMessage(LogLevel level)
{
var message = $"Test {level} message generated at {DateTime.UtcNow:O}";
switch (level)
{
case LogLevel.Information:
Logger.LogInformation("{Message}", message);
break;
case LogLevel.Warning:
Logger.LogWarning("{Message}", message);
break;
case LogLevel.Error:
Logger.LogError("{Message}", message);
break;
}
logCount++;
}
private void LogStructuredMessage()
{
var userId = Guid.NewGuid();
var operationId = Random.Shared.Next(1000, 9999);
Logger.LogInformation(
"User {UserId} performed operation {OperationId} with status {Status} at {Timestamp}",
userId,
operationId,
"Success",
DateTime.UtcNow
);
logCount++;
}
private void GenerateBulkLogs()
{
for (int i = 0; i < 10; i++)
{
var logLevel = i % 3 switch
{
0 => LogLevel.Information,
1 => LogLevel.Warning,
_ => LogLevel.Error
};
LogMessage(logLevel);
}
}
}