Azure 中的 Serilog 与 API 应用程序

2023-12-22

我已将 Serilog 集成到使用 Asp.Net Core 2.0 开发的 WebApi 项目中 这是配置代码Program.cs:

Log.Logger = new LoggerConfiguration()
        .Enrich.FromLogContext()
        .WriteTo.Console()
        .CreateLogger();

我设法在调试过程中完美地看到日志。
现在,我在 Azure 中将该服务部署为 API 应用程序。
应该应用什么配置才能通过 Azure 门户中的日志流扩展查看生产环境中的日志?


据我所知,Serilog.Sinks.Console 会将日志事件写入 Windows 控制台。但如果将应用程序发布到azure,我们将无法直接看到控制台。

我建议你可以考虑使用Serilog.Sinks.RollingFile https://github.com/serilog/serilog-sinks-rollingfile or Serilog.Sinks.ApplicationInsights https://github.com/serilog/serilog-sinks-applicationinsights#serilogsinksapplicationinsights而不是控制台来写入日志事件。

关于如何使用Serilog.Sinks.RollingFile或Serilog.Sinks.ApplicationInsights,您可以参考以下代码。

首先,安装Serilog.AspNetCore https://www.nuget.org/packages/Serilog.AspNetCore and Serilog.Sinks.RollingFile https://www.nuget.org/packages/Serilog.Sinks.RollingFile/来自 Nuget 的包。

然后您可以使用下面的代码来记录信息。

    //if you want to use ApplicationInsights just change the write to's method as Serilog.Sinks.ApplicationInsights links shows
    Log.Logger = new LoggerConfiguration()
       .MinimumLevel.Debug()
       .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
       .Enrich.FromLogContext()
       .WriteTo.RollingFile("log-{Date}.txt")
       .CreateLogger();

    Log.Information("This will be written to the rolling file set");

它将自动创建 txt 文件来记录事件。

结果是这样的,你会在应用程序的 wwwroot 路径中找到它:


Update:

如果您想使用 Serilog 将日志记录到 azure 日志流,您需要首先在 Web 应用程序中启用“诊断日志”。然后,您可以使用 Serilog 将文件记录到天蓝色默认的“诊断日志”文件夹。例如:D:\home\LogFiles\http\RawLogs。然后日志将显示在日志流中。

使用下面的代码进行测试:

        Log.Logger = new LoggerConfiguration()
          .MinimumLevel.Debug()
          .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
          .Enrich.FromLogContext()
          .WriteTo.File(@"D:\home\LogFiles\http\RawLogs\log.txt")
          .CreateLogger();

        Log.Information("This will be written to the rolling file set");

并启用诊断日志。

然后打开日志流并找到应用程序日志。

可以发现日志已经登录到log-steam中了。

文件夹:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure 中的 Serilog 与 API 应用程序 的相关文章

随机推荐

  • 是否有一个Matlab条件IF运算符可以像VBA的IIF一样放置在INLINE中

    在 VBA 中我可以执行以下操作 A B IIF C gt 0 C 0 所以如果 C gt 0 我得到A B C和 CA B 是否有一个运算符或函数可以让我执行这些条件inline在 MATLAB 代码中 简单地利用 MATLAB 在操作需
  • 使用 Twisted Python 的 SMTP 模块清理资源

    这与之前回答的问题有关 使用 Twisted 记录 SMTP 连接 https stackoverflow com questions 12164557 logging smtp connections with twisted 我有一个在
  • 调用“pip install”时运行自定义任务

    我想让我的 python 包 pip installable 问题是该包具有必须源自用户的 init shell 脚本的 shell 脚本 例如 bashrc 但安装后 用户并不确切知道脚本去了哪里 大概是 usr bin 但我们不能保证
  • rubyracer 或 libv8 在 Rails 应用程序中的用途是什么?

    我当时正在做一个项目 经常遇到 therubyracer 和 libv8 的问题 所以我决定删除它们 似乎唯一使用它们作为依赖项的是 less rails 无论如何我都想删除它 我的主要问题是它们的用途是什么 我在普通应用程序中是否需要它们
  • 拆分 BigIntegers 数字

    我正在尝试分割一个大整数的数字 让我说得更具体一些 我正在使用斐波那契序列生成一个大整数 现在使用这个算法我需要循环 直到找到一个 BigInteger 其中前 9 位数字和最后 9 位数字是泛数字 唯一的问题是我必须循环的数量是 300K
  • 对从 Ansible Tower (awx) 执行的 fetch_module 进行故障排除

    我正在尝试从远程主机执行一个非常简单的获取文件 不知怎的 我从来没有让它发挥作用 从远程 Linux 机器获取到 Ansible Tower awx 主机 也是 Linux 机器 这是 Ansible 代码 name get new pri
  • 活动 onCreate 中的 java.util.ConcurrentModificationException

    在最近的一个版本中 我通过 Admob 广告中介添加了 MoPub 我在崩溃日志中看到了一堆 ConcurrentModificationException 这一切似乎都是本机代码 我使用的是所有广告相关和 google android 相
  • Android FragmentTab 宿主和 Fragments 内的 Fragments

    我有一个具有如下层次结构的应用程序 FragmentTabHost Main Activity Fragment tab 1 content splitter view Fragment lhs list Framment rhs cont
  • PHP - fopen($url) 无法打开流:权限被拒绝

    我的网站必须具有非常相似的 php 配置 实际上在同一个托管帐户上 具有几乎相同的 php 代码和相同的文件结构 在某个时刻 我打电话fopen http example com rssfedd xml 检索 RSS 提要 on http
  • 具有多个 X 轴列的 ASP 图表

    我有一个包含两列的 SQL 表 销售人员和状态 状态可以是金 银 铜三种状态之一 如何创建一个图表 其中销售人员姓名沿 x 轴出现一次 但其姓名上方有三列用于显示每种状态的计数 谢谢 乔诺 如果我理解正确的话 你正在尝试做类似这篇文章的事情
  • 在QTabBar中隐藏底线

    似乎没有办法为底线 如下图所示 设置样式表QTabBar 我想将其删除 我怎样才能删除它 现在已经 6 7 个月没有使用 Qt 了 所以我不确定这是否有效 也无法测试它 给QTabBar drawBase http qt project o
  • 在Javascript中,为什么“this”运算符不一致?

    在 JavaScript 中 this 运算符在不同场景下可以指代不同的事物 通常 在 JavaScript 对象 内的方法中 它指的是当前对象 但当用作回调时 它变成对调用对象的引用 我发现这会导致代码出现问题 因为如果您使用 JavaS
  • 当无法推断 Rust 借用检查器中的生命周期时?

    在大多数情况下 Rust 编译器可以推断生命周期 如果生命周期范围是在运行时确定的 则表示必须显式标记生命周期 fn longest lt a gt x a str y a str gt a str if x len gt y len x
  • 如何让 Powershell 等到命令完成后再继续?

    我的脚本会在安装较新版本之前卸载 Windows 应用商店应用程序 我需要确保在安装之前卸载已完成 那么如何确保我已经等待了足够长的时间 Remove Appxpackage MyAppName wait here Add Appxpack
  • 如何使用 JDBC 从存储过程中获取*所有内容*

    当使用 JDBC 处理 SQL Server 存储过程时 我偶尔会遇到两种奇怪的行为 Issue 1 我在 SQL Server Management Studio SSMS 中运行一个存储过程 它返回一个结果集 然而 当我尝试 try C
  • 仅在第一次调用变量时才执行工作的 Pythonic 方式

    我的 Python 类有一些变量需要在第一次调用时进行计算 后续调用应该只返回预先计算的值 我不想浪费时间做这项工作 除非用户确实需要它们 那么有没有一种干净的 Pythonic 方式来实现这个用例呢 我最初的想法是第一次使用 proper
  • Android中如何将图像转换为字节数组

    我面临一个现实问题 我需要将图像转换为字节数组格式 以便我可以将字节数组上传到网络服务器 我已经尝试了很多但它不起作用 我还得到了字节数组的负值 我不确定在数组中获取字节值我做错了什么 下面是我的代码 请帮助我我做错了什么 Bitmap b
  • 未找到 APOC 程序

    CALL apoc export csv query match m Movie where m name Matrix return m name re sults csv 错误 Neo ClientError Procedure Pro
  • Python-camelot(安装时错误:GhostscriptNotFound)

    我正在尝试使用camelot从pdf中提取表格数据 但出现以下错误 Code tables camelot read pdf file name Error GhostscriptNotFound 请确保 Ghostscript 已安装并且
  • Azure 中的 Serilog 与 API 应用程序

    我已将 Serilog 集成到使用 Asp Net Core 2 0 开发的 WebApi 项目中 这是配置代码Program cs Log Logger new LoggerConfiguration Enrich FromLogCont