在调试程序中,经过日志分期来排查BUG是一个重要手段,它能够说是程序调试的利器。php
随着应用组件变多,那么各coder对输出日志五花八门,有写入stdout,有写stderr, 有写到syslog,也有写到xxx.log的。那么这将致使平台应用日志分布在各个地方,没法统一管理。html
Sentry是一个集中式日志管理系统。它具有如下优势:java
https://docs.getsentry.com/on-premise/server/installation/python
安装依赖包android
sudo apt-get install python-setuptools python-pip python-dev libxslt1-dev libxml2-dev libz-dev libffi-dev libssl-dev libpq-dev libyaml-dev
安装Sentrynginx
pip install -U sentry==8.0.0rc2
vim sentry.conf.pygit
DATABASES = {
'default': {
'ENGINE': 'sentry.db.postgres',
'NAME': 'sentry',
'USER': 'postgres',
'PASSWORD': '123456',
'HOST': 'localhost',
'PORT': '5432',
}
}
EMAIL_HOST = 'smtp.exmail.qq.com'
EMAIL_HOST_PASSWORD = 'HE*******'
EMAIL_HOST_USER = 'hewx@doordu.com'
EMAIL_PORT = 25
EMAIL_USE_TLS = False
设置配置文件路径到环境变量github
export SENTRY_CONF=/home/hewx/workbench/sentry
初始化数据库redis
sentry update
配置Web Server数据库
sudo apt-get install nginx-full sudo vim /etc/nginx/sites-enabled/default location / { proxy_pass http://localhost:9000; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
启动Wokers
sentry celery worker -B
启动Web服务
sentry start
使用浏览器访问sentry,并建立一个项目
参考PHP使用指令http://10.0.0.180/sentry/45183e54fa36/settings/install/php/
<?php require_once "vendor/autoload.php"; $client = new Raven_Client('http://5d68caa5e36c4eaa8f7c0601a521fab6:b5917e01d45f4656ab2d943264b90377@10.0.0.180/3'); $error_handler = new Raven_ErrorHandler($client); $error_handler->registerExceptionHandler(); $error_handler->registerErrorHandler(); $error_handler->registerShutdownFunction(); $client->captureMessage("这里发生了一个错误"); $i = 1 / 0; ?>
pip install raven
from raven import Client client = Client('http://f1ba62aa87cb4fc1a36d9e4f96017e99:96f5feef13dc4d45825e73548cd5b784@10.0.0.180/4') try: 1 / 0 except ZeroDivisionError: client.captureException()
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Sentry Test</title> </head> <body> <script src="https://cdn.ravenjs.com/2.0.1/raven.min.js"></script> <script> Raven.config('http://e896b37840444a41adc9a80aa1292dcb@10.0.0.180/5').install() try { doSomething(a[0]) } catch(e) { Raven.captureException(e) } </script> </body> </html>
https://github.com/joshdholtz/Sentry-Android/tree/android-studio-ify
import com.joshdholtz.sentry.Sentry; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Sentry.init(this, "http://10.0.0.180", "http://340137fc1dc6443e99d9d02b8f1638d0:cfd6587578e742948b60d72442fb4ac8@10.0.0.180/6"); Sentry.captureMessage("OMG this works woooo"); int a = 1 / 0; } ...... RuntimeException: Unable to start activity ComponentInfo{com.joshdholtz.sentrytesting/com.joshdholtz.sentryapp.MainActivity}: java.lang.ArithmeticException: divide by zero Module "android.app.ActivityThread", line 2189, in performLaunchActivity Module "android.app.ActivityThread", line 2238, in handleLaunchActivity Module "android.app.ActivityThread", line 138, in access$800 Module "android.app.ActivityThread$H", line 1201, in handleMessage Module "android.os.Handler", line 102, in dispatchMessage Module "android.os.Looper", line 136, in loop Module "android.app.ActivityThread", line 5016, in main Module "java.lang.reflect.Method", in invokeNative Module "java.lang.reflect.Method", line 515, in invoke Module "com.android.internal.os.ZygoteInit$MethodAndArgsCaller", line 792, in run Module "com.android.internal.os.ZygoteInit", line 608, in main Module "dalvik.system.NativeStart", in main ArithmeticException: divide by zero Module "com.joshdholtz.sentryapp.MainActivity", line 20, in onCreate Module "android.app.Activity", line 5251, in performCreate Module "android.app.Instrumentation", line 1087, in callActivityOnCreate Module "android.app.ActivityThread", line 2153, in performLaunchActivity Module "android.app.ActivityThread", line 2238, in handleLaunchActivity Module "android.app.ActivityThread", line 138, in access$800 Module "android.app.ActivityThread$H", line 1201, in handleMessage Module "android.os.Handler", line 102, in dispatchMessage Module "android.os.Looper", line 136, in loop Module "android.app.ActivityThread", line 5016, in main Module "java.lang.reflect.Method", in invokeNative Module "java.lang.reflect.Method", line 515, in invoke Module "com.android.internal.os.ZygoteInit$MethodAndArgsCaller", line 792, in run Module "com.android.internal.os.ZygoteInit", line 608, in main Module "dalvik.system.NativeStart", in main