đ Sentry.io āĻā§?
Sentry.io āĻāĻāĻāĻŋ āĻāĻĒā§āύ-āϏā§āϰā§āϏ āĻŦāĻžāĻ āĻā§āϰā§āϝāĻžāĻāĻŋāĻ āĻā§āϞ āϝāĻž āϰāĻŋā§ā§āϞ-āĻāĻžāĻāĻŽā§ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ āϤā§āϰā§āĻāĻŋ (error), āĻā§āϰā§āϝāĻžāĻļ, āĻāĻŦāĻ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āϏāĻŽāϏā§āϝāĻž āĻļāύāĻžāĻā§āϤ āĻ āϰāĻŋāĻĒā§āϰā§āĻ āĻāϰā§āĨ¤ āĻāĻāĻŋ āĻĄā§āĻā§āϞāĻĒāĻžāϰāĻĻā§āϰāĻā§ āĻĻā§āϰā§āϤ āϏāĻŽāϏā§āϝāĻžāϰ āĻā§āϏ āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰā§, āϝāĻžāϤ⧠āĻāϰ⧠āϤāĻžāϰāĻž āĻĻā§āϰā§āϤ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻŽā§āϞ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻā§āϞ⧠āĻšāϞā§:
āϰāĻŋā§ā§āϞ-āĻāĻžāĻāĻŽ Error āĻŽāύāĻŋāĻāϰāĻŋāĻ
Stack trace āϏāĻš error details
Issue grouping āĻ tagging
GitHub, Slack āϏāĻš āύāĻžāύāĻž āĻĒā§āϞā§āϝāĻžāĻāĻĢāϰā§āĻŽā§āϰ āϏāĻžāĻĨā§ integration
Performance monitoring (APM)
đ Laravel-āĻ Sentry āϏā§āĻāĻāĻĒ āĻāϰāĻžāϰ āϧāĻžāĻĒāϏāĻŽā§āĻš
Laravel-āĻ Sentry āĻāύāϏā§āĻāϞ āĻāϰāϤ⧠āĻāĻĒāύāĻžāĻā§ āύāĻŋāĻā§āϰ āϧāĻžāĻĒāĻā§āϞ⧠āĻ
āύā§āϏāϰāĻŖ āĻāϰāϤ⧠āĻšāĻŦā§:
ā§§. Composer āĻĻāĻŋā§ā§ āĻĒā§āϝāĻžāĻā§āĻ āĻāύāϏā§āĻāϞ āĻāϰā§āύ:
composer require sentry/sentry-laravel
⧍. .env āĻĢāĻžāĻāϞ⧠DSN āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰā§āύ:
SENTRY_LARAVEL_DSN=https://@o.ingest.sentry.io/
SENTRY_TRACES_SAMPLE_RATE=1.0
â ī¸ DSN āĻĒāĻžāĻā§āĻž āϝāĻžāĻŦā§ Sentry.io āϤ⧠āĻĒā§āϰāĻā§āĻā§āĻ āϤā§āϰāĻŋāϰ āĻĒāϰāĨ¤
ā§Š. config/app.php āĻŦāĻž config/sentry.php (auto-published āĻšāϞā§) āĻāύāĻĢāĻŋāĻāĻžāϰ āĻā§āĻ āĻāϰā§āύ
php artisan vendor:publish --tag=sentry-config
ā§Ē. Laravel exception āĻŦāĻž āϞāĻ āĻā§āϝāĻžāĻĒāĻāĻžāϰ āĻāϰāϤā§:
Laravel āĻāϰ Handler.php āĻĢāĻžāĻāϞ āĻā§āϞ⧠report() āĻŽā§āĻĨāĻĄā§ āϝā§āĻā§āϤ āĻāϰā§āύ:
use Sentry\Laravel\Facade as Sentry;
public function report(Throwable $exception)
{
if (app()->bound('sentry') && $this->shouldReport($exception)) {
Sentry::captureException($exception);
}
parent::report($exception);
}
āύāĻŋāĻā§ āĻāĻāĻāĻŋ Real Laravel āĻā§āĻĄ āĻāĻĻāĻžāĻšāϰāĻŖ āĻĻā§āĻā§āĻž āĻšāϞ⧠āϝā§āĻāĻžāύ⧠Sentry āĻĻāĻŋā§ā§ āĻāĻāĻāĻŋ exception āϧāϰāĻž āĻšāĻā§āĻā§ āĻāĻŦāĻ āϤāĻž Sentry dashboard-āĻ āϰāĻŋāĻĒā§āϰā§āĻ āĻāϰāĻž āĻšāĻā§āĻā§:
â
Laravel āĻā§āĻĄ (Sentry integration)
json([
'message' => 'Something went wrong!',
'error' => $e->getMessage(),
], 500);
}
return response()->json([
'result' => $result,
]);
}
}
đ āĻāĻžāĻāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāϰā§?
10 / 0 āĻāĻāĻāĻŋ DivisionByZeroError āϤā§āϰāĻŋ āĻāϰāĻŦā§āĨ¤
captureException($e) āĻāĻ āϞāĻžāĻāύ⧠Sentry API-āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϤā§āϰā§āĻāĻŋ āϰāĻŋāĻĒā§āϰā§āĻ āĻāϰāĻž āĻšāĻŦā§āĨ¤
āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ Sentry Dashboard-āĻ āϏāĻžāĻĨā§ āϏāĻžāĻĨā§ āĻāĻ error āϞāĻ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύ, Stack Trace āϏāĻšāĨ¤
Laravel-āĻāϰ āϝā§āĻā§āύ⧠āϏāĻžāϰā§āĻāĻŋāϏ, āĻāĻžāϏā§āĻāĻŽ āϞāĻāĻŋāĻ, āĻ āĻĨāĻŦāĻž āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āĻāĻŦā§āϰ āĻŽāϧā§āϝ⧠āĻāĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§āĨ¤
āĻāĻāύ Laravel āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ⧠āĻā§āύ⧠āϤā§āϰā§āĻāĻŋ āĻšāϞ⧠āϤāĻž Sentry dashboard-āĻ āĻĻā§āĻāĻž āϝāĻžāĻŦā§āĨ¤
đą Flutter-āĻ Sentry āϏā§āĻāĻāĻĒ āĻāϰāĻžāϰ āϧāĻžāĻĒāϏāĻŽā§āĻš
ā§§. pubspec.yaml āĻ dependency āϝā§āĻ āĻāϰā§āύ:
dependencies:
sentry_flutter: ^7.10.1 # āϏāϰā§āĻŦāĻļā§āώ āĻāĻžāϰā§āϏāύ āĻā§āĻ āĻāϰā§āύ
⧍. main.dart āĻĢāĻžāĻāϞ⧠āĻāύāĻŋāĻļāĻŋā§āĻžāϞāĻžāĻāĻ āĻāϰā§āύ:
import 'package:flutter/material.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
Future main() async {
await SentryFlutter.init(
(options) {
options.dsn = 'https://@o.ingest.sentry.io/';
options.tracesSampleRate = 1.0; // āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻŽāύāĻŋāĻāϰāĻŋāĻā§ā§āϰ āĻāύā§āϝ
},
appRunner: () => runApp(MyApp()),
);
}
ā§Š. āϤā§āϰā§āĻāĻŋ āϰāĻŋāĻĒā§āϰā§āĻ āĻāϰāĻžāϰ āĻāĻĻāĻžāĻšāϰāĻŖ:
try {
throw Exception('āĻāĻāĻāĻž āĻāĻāĻāĻž āĻā§āϏā§āĻ āĻāĻā§āϏāϏā§āĻĒāĻļāύ');
} catch (exception, stackTrace) {
await Sentry.captureException(
exception,
stackTrace: stackTrace,
);
}
āύāĻŋāĻā§ āĻāĻŽāĻŋ Laravel āĻ Flutter â āĻāĻā§ā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻāϰ⧠āĻĄā§āĻŽā§ āĻā§āĻĄ āĻāĻŦāĻ Sentry.io Dashboard-āĻ āĻā§āĻŽāύ āĻāϰ⧠error āĻĻā§āĻāĻž āϝāĻžā§ āϤāĻžāϰ āϏā§āĻā§āϰāĻŋāύāĻļāĻ āϞā§āĻ āĻā§āĻŽāύ āĻšā§, āϤāĻžāĻ āĻāϞā§āϞā§āĻ āĻāϰāϞāĻžāĻŽāĨ¤
đ Laravel āĻĄā§āĻŽā§ āĻā§āĻĄ (Sentry āϏāĻš)
has('amount')) {
throw new Exception("Amount parameter is missing");
}
// āĻāĻāĻžāύ⧠āĻāϰāĻ āĻĒā§āĻŽā§āύā§āĻ āĻĒā§āϰāϏā§āϏāĻŋāĻ āĻā§āĻĄ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§...
return response()->json(['message' => 'Payment processed']);
} catch (Exception $e) {
captureException($e); // Sentry āϤ⧠exception āĻĒāĻžāĻ āĻžāύ⧠āĻšāĻā§āĻā§
return response()->json([
'error' => 'Payment failed',
'message' => $e->getMessage()
], 500);
}
}
}
āĻāĻ āϰāĻāĻŽ āĻāĻāĻāĻž exception āĻāĻĒāύāĻŋ āϝāĻāύ āĻšāĻŋāĻ āĻāϰāĻŦā§āύ /api/payment (amount āĻāĻžā§āĻž), āϤāĻāύ Sentry āĻĄā§āϝāĻžāĻļāĻŦā§āϰā§āĻĄā§ āϏā§āĻāĻŋ āĻāĻŽāύāĻāĻžāĻŦā§ āĻĻā§āĻāĻž āϝāĻžāĻŦā§:
đŧī¸ Sentry.io Dashboard-āĻ āĻā§āĻŽāύ āĻĻā§āĻāĻž āϝāĻžā§ (Laravel)
Exception: Amount parameter is missing
File: PaymentController.php
Line: 15
User: ID 34 (authenticated)
Tags: environment=production
Sentry Stacktrace āĻ āĻĒā§āϰā§āĻŖ āĻā§āĻĄā§āϰ āϞāĻžāĻāύā§āϰ breakdown, context āĻ variable values āĻĨāĻžāĻā§āĨ¤
đą Flutter āĻĄā§āĻŽā§ āĻā§āĻĄ (Sentry āϏāĻš)
import 'package:flutter/material.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
void main() async {
await SentryFlutter.init(
(options) {
options.dsn = 'https://@o.ingest.sentry.io/';
},
appRunner: () => runApp(MyApp()),
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sentry Demo',
home: Scaffold(
appBar: AppBar(title: Text('Flutter Sentry Example')),
body: Center(
child: ElevatedButton(
child: Text('Generate Error'),
onPressed: () async {
try {
throw Exception("Manual Flutter Exception");
} catch (error, stackTrace) {
await Sentry.captureException(error, stackTrace: stackTrace);
}
},
),
),
),
);
}
}
đŧī¸ Sentry.io Dashboard-āĻ āĻā§āĻŽāύ āĻĻā§āĻāĻž āϝāĻžā§ (Flutter)
Exception: Manual Flutter Exception
Platform: android
User: anonymous
Stack Trace:
MyApp.build.
MainActivity.kt -> FlutterMainActivity
āĻāĻāĻžā§āĻž Geo, OS version, device info āĻāϤā§āϝāĻžāĻĻāĻŋāĻ āĻĒāĻžāĻā§āĻž āϝāĻžāĻŦā§āĨ¤
đ§Ē āĻā§āύ Sentry āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ?
â
āĻĄā§āĻā§āϞāĻĒāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āĻāĻĒāύāĻŋ āϰāĻŋā§ā§āϞ āĻāĻžāĻāĻŽā§ āϏāĻŽāϏā§āϝāĻž āĻāĻžāύāĻŦā§āύ
â āĻāĻāĻāĻžāϰ āĻāĻā§āϏāĻĒā§āϰāĻŋā§ā§āύā§āϏ āĻāĻžāϞ⧠āϰāĻžāĻāϤ⧠āĻĒāĻžāϰāĻŦā§āύ
â āĻā§āϰā§āϝāĻžāĻļ āϰāĻŋāĻĒā§āϰā§āĻ āĻŦāĻŋāĻļā§āϞā§āώāĻŖ āϏāĻšāĻ āĻšāĻŦā§
â āĻāĻŋāĻŽā§ āĻāĻžāĻā§āϰ āĻĢā§āϞ⧠āĻāϰāĻ āĻŽāϏā§āĻŖ āĻšāĻŦā§
⨠āĻāĻĒāϏāĻāĻšāĻžāϰ
Laravel āĻŦāĻž Flutter â āĻāĻĒāύāĻŋ āϝā§āĻāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āύāĻž āĻā§āύ, Sentry āĻāĻĒāύāĻžāĻā§ āĻĄā§āĻā§āϞāĻĒāĻŽā§āύā§āĻ āϞāĻžāĻāĻĢ āϏāĻžāĻāĻā§āϞ āĻāϰāĻ āĻĒā§āϰā§āĻĢā§āĻļāύāĻžāϞ āĻ āĻĒā§āϰā§āĻ
ā§āϝāĻžāĻāĻāĻŋāĻ āĻāϰāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰāĻŦā§āĨ¤ āĻāϤ⧠āĻāĻĒāύāĻŋ āĻļā§āϧ⧠āĻŦāĻžāĻ āĻĢāĻŋāĻā§āϏ āĻāϰāϤā§āĻ āĻĒāĻžāϰāĻŦā§āύ āύāĻž, āĻŦāϰāĻ āϏāĻŽā§āĻŽāϤ⧠āĻ
ā§āϝāĻžāĻāĻļāĻžāύ āύāĻŋā§ā§ āĻāĻāĻāĻžāϰā§āϰ āĻā§āϰāĻžāϏā§āĻāĻ āĻ
āϰā§āĻāύ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤