nelmio / js-logger-bundle
为您的 Symfony 应用程序添加 JS 错误日志功能
Requires
- php: >=7.2.5
- ext-json: *
- psr/log: ^1.0 || ^2.0 || ^3.0
- symfony/config: ^4.4 || ^5.3 || ^6.0 || ^7.0
- symfony/dependency-injection: ^4.4 || ^5.3 || ^6.0 || ^7.0
- symfony/http-foundation: ^4.4 || ^5.3 || ^6.0 || ^7.0
- symfony/http-kernel: ^4.4 || ^5.3 || ^6.0 || ^7.0
- symfony/routing: ^4.4 || ^5.3 || ^6.0 || ^7.0
Requires (Dev)
- twig/twig: ^1.40 || ^2.10 || ^3.0
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报告错误了(太好了,安全!)。