📣读完这篇文章里你能收获到
- 如何在Docker中部署 SEQ:介绍了如何创建和运行 SEQ 容器,给出了详细的执行操作
- 如何使用 NLog 接入 .NET Core 应用程序的日志:详细介绍了 NLog 和 NLog.Seq 来配置和记录日志的步骤
- 日志记录示例:博客提供了一个简单的日志记录示例,展示了如何在应用程序中使用 NLog 记录日志发送到SEQ
文章目录
摘要:本文介绍了如何使用SEQ来进行.NET Core应用程序的日志记录和查询。首先,我们将了解SEQ的基本概念和功能。然后,我们会详细说明如何在.NET Core应用程序中配置和部署SEQ,并通过示例代码演示如何实现日志记录和查询。
一、简介
SEQ是一款功能强大的日志管理工具,它提供了易于使用的Web界面和灵活的查询语法,帮助开发人员更好地理解和分析应用程序的日志信息。在本文中,我们将使用SEQ来记录和查询.NET Core应用程序的日志。
二、SEQ部署
1. 下载SEQ Docker镜像
sudo docker pull datalust/seq:latest
2. 生成SEQ密码
PH=$(echo 'password' |sudo docker run --rm -i datalust/seq config hash)
3. 创建SEQ容器
sudo mkdir -p data/logs
sudo docker run \
--name seq \
-d \
--restart unless-stopped \
-e ACCEPT_EULA=Y \
-e SEQ_FIRSTRUN_ADMINPASSWORDHASH="$PH" \
-v /data/log-prod:/data \
-p 8001:80 \
-p 5341:5341 \
--memory=16g \
--memory-swap=16g \
datalust/seq
上面的docker运行脚本中有几个点需要注意的:
- Seq存储的数据包括元数据和事件数据,元数据指用户信息、Seq配置等数据,事件数据指收集到的日志数据。这两种数据默认都是直接存储在磁盘上的,所以在容器启动时,需要将数据存储的路径映射到宿主机上。事件数据只能存储在磁盘上,而元数据有需要的话可以存储到sqlserver或者postgresql,可以在容器启动之后进入容器对元数据进行迁移,可以在容器启动时通过环境变量的方式指定存储路径,如下:
-e SEQ_METASTORE_POSTGRES_CONNECTIONSTRING="Host=localhost;Port=5432;Database=seq"
- Seq实例在不指定最大内存的情况下会尽可能的占用宿主机尽可能多的内存,为了保证实例能够稳定运行,不会因为内存问题退出或者被杀掉,也为了不影响其他应用,可以为seq实例设置可用的最大内存,而通过seq提供的环境变量SEQ_CACHE_SYSTEMRAMTARGET可以配置seq是否使用缓存,在为seq容器分配的内存比较少的情况下,可以不适应缓存。
4. 访问SEQ Web界面
SEQ容器启动后,打开浏览器并输入http://localhost:8001,即可进入SEQ的Web界面。
5. 创建日志源APP Key
在SEQ的Web界面中,我们需要为每个应用程序创建一个独立的日志源。通过点击界面右上角的"Add +"按钮,可以创建一个新的日志源,并记录下该日志源的API密钥,以便后续在.NET Core应用程序中进行配置。
三、.NET Core接入(NLog)
1. 添加依赖包
在.NET Core应用程序的项目文件中,添加NLog和NLog.Seq的NuGet包引用。可以使用以下命令在项目文件中添加NuGet包引用:
dotnet add package NLog
dotnet add package NLog.Web.AspNetCore
dotnet add package NLog.Targets.Seq
2. 配置nlog.config
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogLevel="info"
throwConfigExceptions="true">
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
<add assembly="NLog.Targets.Seq"/>
</extensions>
<variable name="OwnWebLayout"
value="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}"/>
<targets async="true">
<target name="seq" xsi:type="BufferingWrapper" bufferSize="1000" flushTimeout="2000">
<target xsi:type="Seq" serverUrl="http://localhost:5341" apiKey="" >
<property name="MachineName" value="${machinename}" />
<property name="LogType" value="${event-properties:item=LogType}" />
</target>/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="seq" />
</rules>
</nlog>
3. 在Startup.cs文件中启用NLog
using NLog.Extensions.Logging;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// 其他配置...
// 启用NLog
services.AddLogging(loggingBuilder =>
{
loggingBuilder.ClearProviders();
loggingBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
loggingBuilder.AddNLog();
});
}
}
4. 日志记录
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("Index page visited");
// 应用程序逻辑...
return View();
}
四、SEQ查询
1. 事件查询
在SEQ的Web界面中,可以使用简单而强大的查询语法来过滤和分析日志。例如,可以通过关键词、日期范围或其他属性进行过滤。以下是一些常用的查询示例:
- 查询包含特定关键词的日志:“关键词”
- 查询特定级别的日志:@Level = “级别”
2. 看板制作
五、总结
本文介绍了如何使用SEQ来记录和查询.NET Core应用程序的日志。通过部署SEQ并在.NET Core应用程序中配置日志记录,可以轻松地将应用程序的日志发送到SEQ中,并使用SEQ的强大查询功能对日志进行分析和筛选。希望本文能帮助你更好地管理和利用应用程序的日志信息。
- 附SEQ官方的文档:https://docs.datalust.co/docs