如何向 Symfony/Monolog 日志输出添加附加信息(主机、URL 等)?

2024-04-09

我正在开发我的第一个基于 Symfony 的 WebApp 项目。我已将 Symfony 配置为不仅将日志消息写入不同的日志文件,而且还立即以电子邮件形式发送关键错误消息。这很好用。不过,我想在默认日志消息中添加一些附加信息,以便更轻松地找到实际的错误源。

例子: 一页的 Twig 文件从 .yml 文件加载本地化文本。文本包含一个%about_link%应替换为“关于”页面的路径/URL 的占位符。我忘记了这个替换,所以链接没有指向 URL 而是指向%about_link%反而。这导致NotFoundHttpException因为没有路线可以到达%about_link%可以被找寻到...

没什么大不了。但要找到包含此错误的实际页面/控制器有点棘手。默认日志消息显示以下内容:

[2015-12-14 17:19:36] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET /%25about_link%25"" at /long/path/to/symfony/.../RouterListener.php line 176 []

所以抛出了异常RouterListener.php当试图找到一条路线时%about_link%。好吧,这并没有给我任何提示这个坏链接位于哪个页面。

当然,对错误路由的调用根本不必位于任何页面上。用户可以直接输入错误链接。 Symfony 必须存储/记住最后一页才能给出有关可能来源的任何提示。那么,是否有可能包含这些信息呢?

此外,我想添加有关报告问题的主机的信息。我正在运行 WebApp 的两个实例:www.my_web_app.xy and betatest.my_web_app.xy如果日志消息显示它是否来自,这将是一个很大的帮助www或来自betatest.

将此信息添加到我自己创建的日志消息中没有问题,但如何将此信息添加到由 Symfony 或第三方代码生成的消息中?我必须在日志消息到达日志处理程序之前以某种方式拦截它。这可能吗?


如果您想向日志条目添加额外的信息,您可以使用处理器来完成此操作。使用处理器,您可以在格式化程序解析记录数组之前对其进行修改。额外的部分显示在日志条目的末尾。

<?php

namespace AppBundle\Monolog;

use Symfony\Component\HttpFoundation\RequestStack;

class WebProcessor
{
    private $requestStack;

    public function __construct(RequestStack $requestStack)
    {
        $this->requestStack = $requestStack;
    }

    public function processRecord(array $record)
    {
        $request = $this->requestStack->getCurrentRequest();

        if ($request) {
            $record['extra']['host'] = $request->getHost();
            $record['extra']['url'] = $request->getRequestUri();
            // ...
        }

        return $record;
    }
}

现在将其添加到您的services.yml为所有日志条目注册它:

app.monolog.processor.web:
    class: AppBundle\Monolog\WebProcessor
    arguments: ["@request_stack"]
    tags:
        - { name: monolog.processor, method: processRecord }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何向 Symfony/Monolog 日志输出添加附加信息(主机、URL 等)? 的相关文章

随机推荐

  • 使用 jQuery 将单个事件处理程序绑定到多个事件

    我有以下 div 具有不同的 onblur onmousedown onmouseup 和 onfocus 功能 我想最小化代码 并且在 div 内只有一个函数调用来处理所有函数状态 我想用 jquery 来做到这一点 所以换句话说 我想创
  • 用 Python 表示网络

    我有一个顶点 例如dic a 0 b 1 c 2 d 3 e 4 f 5 n 6 m 7 g 8 我有两列如下代表顶点之间的关系 a a b d e f c f n f m g 我想通过一条边将第一列中的每个顶点与第二列中的相应顶点关联起来
  • R中的距离计算优化

    我想知道是否有任何方法可以优化下面的距离计算过程 我在下面留下了一个小例子 但是我正在处理一个超过 6000 行的电子表格 计算变量 d 需要相当长的时间 可以通过某种方式调整它以获得相同的结果 但以优化的方式 library rdist
  • 如何在 C# 中将对象类型传递给类型参数

    我有一个具有类型参数的函数 public static object SetValuesToObject Type tClass DataRow dr return object 我不知道如何传递一个类作为该函数的参数 在这里我想传递参数类
  • Rails 5 中的 Webpacker 需要很长时间才能编译那么多文件。我怎样才能看到它在做什么?

    Webpacker Compiling 编译我对 javascript 文件的任何更改都需要几秒钟 6 2 秒 这确实减慢了我的 JS 开发速度 有没有办法查看 Rails 中的 Webpacker 正在做什么以及它大部分时间都花在哪些文件
  • 怎么修 '。'不是内部或外部命令错误

    我遵循了几个链接来尝试解决这个问题 例如link1 http community spiceworks com how to show 36697 how to fix not recognized as an internal or ex
  • C# 保存大图像

    我在尝试使用 C 保存巨大图像 我指的是超过 1 GB 时遇到了困难 基本上 我尝试分部分执行此操作 我有大约 200 个位图源 我需要一种方法在将它们编码为 png 文件之前或之后将它们组合起来 我知道这将需要大量的 RAM 除非我以某种
  • 观察非 ember 全局变量

    我想要一个计算属性来观察非 ember 全局 localStorage 中的特定键 这可能吗 以下似乎并没有削减它 someProperty function some functionality property localStorage
  • 有没有办法忽略文本文件中某些行的读取?

    我正在尝试读取 C 应用程序中的文本文件 但我不想读取前两行或最后一行 文件中有 8 行 所以实际上我只想读取第 3 4 5 6 和 7 行 有什么办法可以做到这一点吗 示例文件 USE Shelley s Other Database C
  • 膨胀类 CollapsingToolbarLayout 时出错

    我的 CollapsingToolbarLayout 由于错误膨胀类 android support design widget CollapsingToolbarLayout 而崩溃 我上周末更新了android studio 更新之前
  • 如何删除firebase中具有指定标题的特定记录

    我在 Web 应用程序中使用 Firebase 数据库 并且有这样的数据 如何删除标题中包含 Apple 的整个记录 图中标记 我写了下面的代码 但它不起作用 请帮助 var abc firebase database ref fireba
  • 如何使用 Selenium Server 2.20 获取执行服务器名称或地址

    使用 Selenium Server 时 记录实际执行 selenium 脚本的计算机的名称非常有用 是否可以获得该信息 我正在使用 C 绑定 但用任何语言回答都可以 我们应该知道 Selenium 服务器在哪里运行 这是Java代码 我们
  • Android 应用内结算可用产品列表

    是否可以通过某种方式从 Play 商店获取所有可用产品的列表 我想要做的是获取所有可用的项目 然后将它们显示在 ListView 中 每当有人点击 ListView 时 就会在 Google Play 商店中打开正确的项目 那可能吗 如果是
  • 仅当其中一个流发生更改时,combineLatest 才会发出

    我有一个具有频繁值的流和一个具有较慢值的流 我想将它们组合起来 但仅当较慢的发出时才发出一个值 所以combineLatest不起作用 就像这样 a1 a2 b1 a2 b1 a3 a4 a5 b2 a5 b2 目前我正在这样做 有没有更干
  • 针对大型文件夹的并行 tar 和分割

    我有一个非常大的文件夹 我想对其进行 gzip 压缩并拆分以进行存档 bin bash dir 1 name 2 size 32000m tar czf dev stdout dir split a 5 d b size name 有没有办
  • 将列联表从 R 导出到 Excel 的最有效方法

    我正在 R 中创建一些列联表 交叉表 我想将其移动到 Excel 以在 Word 文档中使用 我发现了关于如何在几个问题中表现出色的讨论 如何将多元预测结果从 R 导出到 Excel https stackoverflow com ques
  • 在特定版本中测试 python 脚本

    我目前在我的 Mac 上安装了 Python 2 6 2 我正在编写一个必须在 Python 2 5 2 上运行的脚本 所以我想编写一个 python 脚本 并且测试专门针对 2 5 2 而不是 2 6 2 我正在查看 virtualenv
  • 不弹出标准对话框

    我有一个带有 TSaveDialog 的表单 当调用 Execute 函数时 从 IDE 运行时它不会弹出 它does独立运行时弹出 进一步测试后 我发现所有 TSave TOpen 对话框都不起作用 不工作意味着 Execute 返回Fa
  • 有没有办法让图像通过 ASP.NET 和 app_offline.htm 显示?

    当使用ASP NET的app offline htm功能时 它只允许html 但不允许图像 有没有办法让图像显示无需将他们指向另一个网站上的不同网址 是的 它只是不能来自具有 app offline htm 文件的网站 该图像必须托管在其他
  • 如何向 Symfony/Monolog 日志输出添加附加信息(主机、URL 等)?

    我正在开发我的第一个基于 Symfony 的 WebApp 项目 我已将 Symfony 配置为不仅将日志消息写入不同的日志文件 而且还立即以电子邮件形式发送关键错误消息 这很好用 不过 我想在默认日志消息中添加一些附加信息 以便更轻松地找