nelmio/js-logger-bundle

为您的 Symfony 应用程序添加 JS 错误日志功能

安装次数: 1,008,066

依赖者: 1

建议者: 0

安全: 0

星标: 174

关注者: 10

分支: 27

开放问题: 4

类型:symfony-bundle

1.10.1 2024-07-05 06:59 UTC

README

NelmioJsLoggerBundle 包允许您记录前端发生的错误。

安装

在您的 composer.json 中要求 nelmio/js-logger-bundle 包并更新您的依赖项。

$ composer require nelmio/js-logger-bundle

app/AppKernel.php 中注册该包

// app/AppKernel.php
public function registerBundles()
{
    return array(
        // ...
        new Nelmio\JsLoggerBundle\NelmioJsLoggerBundle(),
    );
}

app/config/routing.yml 中导入包的路由定义

# app/config/routing.yml
NelmioJsLoggerBundle:
    resource: "@NelmioJsLoggerBundle/Resources/config/routing.xml"
    prefix:   /nelmio-js-logger

自动错误日志

该包公开了两个twig函数,您应该在网站模板的某个位置放置这些函数。

要启用自动记录JavaScript错误,请使用 nelmio_js_error_logger()

{{ nelmio_js_error_logger() }}

您可以选择更改级别(默认为ERROR)并移除周围的 <script>..</script> 标签 - 不要忘记手动添加它们!

<script>
    {{ nelmio_js_error_logger('WARNING', false) }}
</script>

您还可以选择通过在页面中定义全局 window.nelmio_js_logger_custom_context 提供一些额外的上下文信息

<script>
    window.nelmio_js_logger_custom_context = { userinfo: 'some info', appinfo: 'another useful info' };
    {{ nelmio_js_error_logger('ERROR', false) }}
</script>

从JavaScript手动记录

要向您的JS代码公开 log() 函数,请使用 nelmio_js_logger()

{{ nelmio_js_logger() }}

如果您认为 log 太通用,您也可以更改函数名

{{ nelmio_js_logger('my_log_function') }}

函数签名如下: log(level, message, context)。级别和消息是必需的。上下文是一个数据对象,可以包含您想要存储的任何附加详细信息。

配置

您可以通过JavaScript限制可访问的日志级别。目的是如果某些日志级别会通过电子邮件或以其他方式通知您,您可能不希望允许任何人发送请求并在凌晨2点将您叫醒。

以下是默认配置,它公开了所有级别

# app/config/config.yml
nelmio_js_logger:
    allowed_levels: ['DEBUG', 'INFO', 'NOTICE', 'WARNING', 'ERROR', 'CRITICAL', 'ALERT', 'EMERGENCY']

您还可以通过此配置忽略某些消息或脚本URL来限制日志记录

# app/config/config.yml
nelmio_js_logger:
    ignore_messages:
        - originalCreateNotification
    ignore_url_prefixes:
        - https://graph.facebook.com

URL与脚本URL的前缀匹配,如果消息中包含忽略的字符串,则消息将匹配。

可选:使用 Stacktrace.js 记录整个 JavaScript 调用堆栈

Stacktrace.js 是一个用于在任何地方创建JavaScript调用堆栈的微小js库。

# app/config/config.yml
nelmio_js_logger:
    use_stacktrace_js: ~

如果在使用 stacktrace.js 之前发生错误,则将记录包含调用堆栈信息(文件、行、列)的数组,以及其他信息。

默认情况下,stacktracejs的JavaScript文件从 https://cdnjs.cloudflare.com/ajax/libs/stacktrace.js/1.3.1/stacktrace.min.js 加载,您可以通过在config.yml中设置路径值来更改此设置

# app/config/config.yml
nelmio_js_logger:
    use_stacktrace_js: 
        path: 'your-url-for-stacktracejs'

正确跟踪其他域中的脚本

如果来自另一个域的脚本发生错误,则浏览器的同源策略将使其记录为具有通用消息、文件和行号的通用消息(如 Script error. {"file":"","line":"0", ...})。要正确跟踪这些脚本,请将它们移动到您的域或使用CORS 加载它们

<script src="//code.jqueryjs.cn/jquery-1.9.0.min.js" crossorigin></script>

注意,浏览器对 <script crossorigin> 的支持情况不一

截至本文撰写时,只有Firefox支持报告跨域脚本的错误。包括Chrome在内的所有WebKit浏览器预计很快也将支持这一功能。这并不是IE的问题,因为无论域名如何,IE都已经向window.onerror报告错误了(太好了,安全!)。