Seq 日志: .NET 应用程序中集成与快速入门

Seq 是一个功能强大且易于使用的日志服务器,特别适合用于集中管理和可视化 .NET 应用程序的日志。它支持结构化日志记录,提供实时查询和分析功能,帮助开发者快速定位和解决问题。

安装和配置 Seq

  • Windows 部署

    可以从 Seq 下载页面:https://datalust.co/download 获取最新版本并按照说明进行安装。

  • Docker 部署

    创建 Docker 数据卷并启动 Seq 容器:

    docker volume create seq-data
    docker run --name seq -d --restart=always -e ACCEPT_EULA=Y -v seq-data:/data -p 5380:80 datalust/seq:2023.3
    

    访问 http://localhost:5380 即可看到 Seq 管理界面。

  • Linux 部署

    请参考 Seq 官方文档 获取详细的安装步骤。

界面

安装完成后进入管理界面:http://localhost:5341/

首页

仪表盘板

在 .NET Core 中集成 Seq

使用 Serilog 集成
  1. 添加 NuGet 包

    安装 Serilog.Sinks.Seq 包:

    dotnet add package Serilog.Sinks.Seq
    
  2. 配置 Serilog

    Program.cs 文件中配置 Serilog 以将日志发送到 Seq 服务器:

    using Serilog;
    
    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug() // 设置最低日志级别为 Debug
        .WriteTo.Seq("http:// seq-server-url") // 替换为你的 Seq 服务器地址
        .CreateLogger();
    
    try
    {
        Log.Information("应用程序启动");
        // 你的应用程序代码
    }
    catch (Exception ex)
    {
        Log.Fatal(ex, "应用程序意外终止");
    }
    finally
    {
        Log.CloseAndFlush();
    }
    
  3. 记录日志

    在控制器或服务中使用 ILoggerLog 记录日志:

    public class TestController : ControllerBase
    {
        private readonly ILogger<TestController> _logger;
    
        public TestController(ILogger<TestController> logger)
        {
            _logger = logger;
        }
    
        [HttpGet("TestLogSeq")]
        public string TestLogSeq()
        {
            _logger.LogInformation("这是一条测试日志。");
            return "ok";
        }
    }
    
使用 NLog 集成
  1. 配置 NLog

    在项目根目录添加 nlog.config 文件,并配置 Seq 作为目标:

    <?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">
      <targets>
        <target xsi:type="Seq" serverUrl="http://localhost:5380" apiKey="your_api_key" />
      </targets>
      <rules>
        <logger name="*" minlevel="Debug" writeTo="seq" />
      </rules>
    </nlog>
    
  2. 启用 NLog

    Program.csStartup.cs 中启用 NLog:

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .UseNLog();
    
  3. 记录日志

    同样,在控制器或服务中使用 ILogger 记录日志:

    public class TestController : ControllerBase
    {
        private readonly ILogger<TestController> _logger;
    
        public TestController(ILogger<TestController> logger)
        {
            _logger = logger;
        }
    
        [HttpGet("TestLogSeq")]
        public string TestLogSeq()
        {
            _logger.LogInformation("这是一条测试日志。");
            return "ok";
        }
    }
    

Seq 日志查询

Seq 提供了强大的查询功能,支持类似 SQL 的语法:

  • 查询包含特定关键词的日志

    @Message like '%keyword%'
    
  • 查询特定级别的日志

    @Level = 'Error'
    
  • 查询特定服务的日志

    app = 'service_name'
    
  • 聚合查询

    select count(*) as ErrorCount from stream where @Level = 'Error' group by @timestamp.day
    

缺点

  • 性能和资源限制:高负载下可能面临性能瓶颈,对内存和资源管理要求较高。
  • 功能限制:免费版功能受限,付费版价格较高。
  • 安全问题:默认使用HTTP,需额外配置SSL/TLS保障数据安全。

总结

通过以上操作,可以快速在 .NET Core 应用中集成 Seq,并利用其强大的日志聚合和查询功能提升开发和运维效率。作为日志系统,免费版本的基础功能已经足够使用 。更多高级功能和配置可以参考 Seq 官方文档

https://docs.datalust.co/docs/an-overview-of-seq

本文作者:今晚打老虎!

本文链接:https://www.cnblogs.com/netcore5/p/18687653

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   今晚打老虎!  阅读(73)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起