在調試程序中,經過日誌分期來排查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