我使用 Sentry(本地)进行日志记录。最近我开始转向 Spring 框架,我无法获取命中 Sentry 服务器的日志。我尝试使用log4j和logger (slf4j)。在这两种情况下,我都无法取得任何进展。我的假设是,由于我使用spring-starterMaven 依赖项,因此它logger默认包含在内,而有关 Sentry + Java 的所有文档都提到使用raven. 可能我的日志配置因此而未被读取。谁能告诉我如何让哨兵参与我的 Spring 项目?
编辑:这是我的logback.xml,位于类路径中。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="Sentry" class="net.kencochrane.raven.logback.SentryAppender">
<dsn>
http://xxx@example.com/sentry/2
</dsn>
</appender>
<root level="error">
<appender-ref ref="Sentry" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud) 我们在 python 代码中使用哨兵。我们遇到了一个奇怪的问题,当我们尝试在哨兵中检查对象时,对象的表示被截断。例如,当用户进入“异常”视图并选择“完整”时,他们可以在堆栈跟踪中导航。在堆栈跟踪的每个段中,哨兵都会打印出对象的__repr__. 不幸的是,它似乎截断了较长的表示。这对我们来说是一个很大的问题。
对于那些好奇的人,我们已经尝试将我们设置string_max_length为 10,000,但它似乎对这些表示没有影响(尽管 captureMessage 现在发送更长的字符串)。
如果能够将 AWS 上的日志记录与我们的服务器日志合并起来,那就太好了 - 奇怪的是,我并没有看到太多关于使用 CloudWatch 记录客户端错误的话题。
\n您能帮助我们集成这些出色的工具吗?我们的 React Native iOS 项目已经使用 Crashlytics 几个月了,它在本机崩溃的情况下运行良好,但在JS 异常的情况下,它需要对反应本机日志进行一些自定义(这篇 Medium 文章帮助我们达到了详细的 JS 输出,如可能的)。最终我们没有得到我们想要的那么好的 JS 错误输出。
因此我们决定也集成 Sentry。它成功完成了,但似乎 Sentry超过了Crashlytics 捕获崩溃的速度:我们可以在 Sentry 仪表板中看到崩溃,但在 Crashlytics 仪表板中看不到。
我的问题是:是否可以针对本机崩溃和 JS 异常这两种情况集成 Crashlytics 和 Sentry ?
先感谢您。
UPD 06.03.2019 最后,我们只使用 Sentry,原因如下:
sentry crashlytics react-native react-native-ios react-native-sentry
我正在使用 webpack 来构建我的应用程序,它在本地与@sentry/webpack-plugin\xe2\x80\x93 一起工作,它会自动生成版本并将源映射上传到 Sentry。
但是,如果我尝试在 Heroku 上构建相同的应用程序,则会出现以下错误:
\n\nError: Command failed: /tmp/build_e3ae44a78c063d6493d3fdfc983bd8d6/client/node_modules/@sentry/cli/sentry-cli releases propose-version\n INFO 2019-04-16 13:33:13.141611957 +00:00 Loaded config from /tmp/build_e3ae44a78c063d6493d3fdfc983bd8d6/client/.sentryclirc\n DEBUG 2019-04-16 13:33:13.141666891 +00:00 sentry-cli version: 1.41.0, platform: "linux", architecture: "x86_64"\n INFO 2019-04-16 13:33:13.141684793 +00:00 sentry-cli was invoked with the following command line: "/tmp/build_e3ae44a78c063d6493d3fdfc983bd8d6/client/node_modules/@sentry/cli/sentry-cli" "releases" "propose-version"\n DEBUG 2019-04-16 13:33:13.141916192 +00:00 error: running update nagger\n DEBUG 2019-04-16 13:33:13.141939514 +00:00 skipping update nagger because session is not attended\nerror: Could not automatically determine release name\n DEBUG 2019-04-16 …Run Code Online (Sandbox Code Playgroud) 在我们的项目中我们使用Sentry来报告错误。这工作得很好,但是在负载很大的系统上,当第三方系统宕机时,我们有时会看到错误高峰。例如,如果数据库无法访问,在问题解决之前我们可能会收到几万个调用,所有这些都会导致向 Sentry 报告错误。
我知道Sentry客户端有一个通用的设置sample.rate。这允许仅将所有事件的一定百分比发送到 Sentry。但是,我只是想避免在第三方系统出现故障时出现大量重复的错误报告。我不想限制一般发送的错误数量。有没有办法配置 Sentry 客户端,以便在出现峰值时仅发送一些样本,否则发送所有错误报告?
所以我的应用程序应该可以离线和在线工作。那么,当用户离线时,如何在我的 Sentry 仪表板中收到错误消息呢?
1) 我的网页代码是用 TypeScript 编写的,我使用 WebPack 将其捆绑到最终用户的“main.min.js”文件中。(非常标准的东西。)
2) 我想利用Sentry.io服务自动向云端报告错误,因此我安装了该@sentry/browser包并在我的 TypeScript 代码库中对其进行了初始化。到目前为止一切顺利 - 我的网页成功向 Sentry 报告错误。
3) 然而,报告的错误不包含真实的行号,例如源映射。为了解决这个问题,Sentry 文档说您需要使用SentryWebpackPlugin. 所以,我已经安装了它,并将我的 WebPack 配置更改为以下内容:
import SentryWebpackPlugin from '@sentry/webpack-plugin';
import * as path from 'path';
import * as webpack from 'webpack';
// Constants
const epoch = new Date().getTime();
const config: webpack.Configuration = {
// The entry file to bundle
entry: path.join(__dirname, 'src', 'main.ts'),
// Where to put the bundled file
output: {
path: __dirname, // By default, …Run Code Online (Sandbox Code Playgroud) 我正在尝试让源映射与 Sentry 一起用于 ReactJS 应用程序。我将 webpack 与 SentryWebpackPlugin 结合使用。webpack config 中的相关配置如下所示:
const SentryWebpackPlugin = require('@sentry/webpack-plugin');
const SentryOptions = {
// sentry-cli configuration
authToken: process.env.SENTRY_AUTH_TOKEN,
project: process.env.SENTRY_PROJECT,
// webpack specific configuration
include: pathLibrary.resolve(__dirname, '..')
};
module.exports = {
devtool: 'hidden-source-map',
output: {
filename: '[name].[contenthash].js',
chunkFilename: '[name].[contenthash].js',
publicPath: '',
path: pathLibrary.resolve(__dirname, '..', 'public'),
sourceMapFilename: '../tmp/sourcemaps/[file].map'
}
}
if (DEPLOY_ENVS.includes(env)) {
module.exports.plugins.push(new SentryWebpackPlugin(SentryOptions));
}
Run Code Online (Sandbox Code Playgroud)
当我构建和部署应用程序时,我确实可以在 Sentry 中看到源映射和源代码,但是问题页面上显示的代码似乎不可读。这让我相信我在命名输出文件或源映射方面做了一些错误的事情。
我需要用 docker 设置哨兵。这就是为什么我不想在安装过程中被要求创建用户。因此我使用以下命令来安装哨兵。
./install.sh --no-user-prompt
Run Code Online (Sandbox Code Playgroud)
在配置文件 config.example.yml 中,我还设置了以下值。不幸的是我无法登录。
system.secret-key: 'somesupersecretkey'
system.admin-email: 'somemail@adress.com'
Run Code Online (Sandbox Code Playgroud)
我必须如何更改配置文件才能设置用户。那么 system.secrey-key 到底有什么用呢?
sentry ×10
webpack ×3
crashlytics ×1
exception ×1
heroku ×1
java ×1
javascript ×1
logging ×1
node.js ×1
python ×1
raven ×1
react-native ×1
source-maps ×1
spring ×1
truncate ×1
typescript ×1