SpringBoot整合Sentry監(jiān)控項目日志

Sentry Java版使用簡介

基本概念

Sentry是什么

Sentry 是一個開源的實時錯誤報告工具盖奈,支持 web 前后端恶守、移動應(yīng)用以及游戲埋嵌,支持 Python破加、OC、Java雹嗦、Go范舀、Node、Django了罪、RoR 等主流編程語言和框架 锭环,還提供了 GitHub、Slack泊藕、Trello 等常見開發(fā)工具的集成辅辩。

DSN(Data Source Name)

Sentry 服務(wù)支持多用戶、多團隊吱七、多應(yīng)用管理,每個應(yīng)用都對應(yīng)一個 PROJECT_ID鹤竭,以及用于身份認證的 PUBLIC_KEY 和 SECRET_KEY踊餐。由此組成一個這樣的 DSN:

'{PROTOCOL}://{PUBLIC_KEY}:{SECRET_KEY}@{HOST}/{PATH}{PROJECT_ID}'

PROTOCOL 通常會是 http 或者 https,HOST 為 Sentry 服務(wù)的主機名和端口臀稚,PATH 通常為空吝岭。
為方便管理,每個應(yīng)用生成一個 DSN吧寺,具體可咨詢虎大師 或者 我窜管。

使用 Sentry SDK

Sentry 的 SDK 通常在各語言的包管理器中成為 Raven,使用起來也非常簡單稚机。以 Java版本為例(使用SpringBoot框架):

  • 1.首先項目中pom文件安裝 Raven

    <!--導入Sentry-->
    <dependency>
       <groupId>com.getsentry.raven</groupId>
       <artifactId>raven-logback</artifactId>
       <version>8.0.2</version>
   </dependency>

  • 2.在項目配置文件中建立logback.xml

<configuration>
    <!-- 彩色日志 -->
    <!-- 彩色日志依賴的渲染類 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(--){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>/>

    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--<pattern> %d{YYYY-MM-dd HH:mm:ss.SSS} [%-5level] -&#45;&#45; %logger{36} [%thread] \t- %msg%n%nopex</pattern>-->
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>


    <appender name="Sentry" class="com.getsentry.raven.logback.SentryAppender">
        <!--每個項目生成不通的key-->
        <dsn>http://d73b23c481654b9ca0e4e8a9db310169:daaf5dc2edef462690791ef324316738@sentry.boluome.com/7</dsn>
        <!-- 設(shè)置攔截的最低級別為warn 警告-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
    </appender>

    <logger name="logback.SentryAppenderIT" level="INFO">
        <appender-ref ref="Sentry"/>
    </logger>

    <root level="INFO"> 
        <appender-ref ref="Console"/>
        <appender-ref ref="Sentry"/>
    </root>
</configuration>
  • 3.application.propertes中添加導入日志配置【主要要提前在pom文件中添加包含*.xml幕帆,否則會報錯,not found file】

logging.config=classpath:logback.xml

  • 4.接口層,正常使用logger等方法。Raven會自動把warn級別通過tcp發(fā)送到日志中心赖条,并通知相關(guān)人員查看信息
   @RequestMapping(value = "/testlog", method = RequestMethod.GET)
    public void testLog() {
        logger.info("test接口");//最低攔截級別為warn失乾,所以info不會輸出發(fā)送到日志中心
        logger.error("error"); //會顯示在日志中心,并郵件通知相關(guān)聯(lián)系人
    }

這樣就可以使用 Raven 對象向 Sentry 服務(wù)器中提交日志信息了纬乍。

使用 Sentry web 服務(wù)

主要是登錄后臺查看碱茁,后續(xù)有時間更新此部分文檔。開通賬號可找虎大師仿贬。

附錄

sentry 官方文檔

<?xml version="1.0" encoding="UTF-8" ?>

<!-- scan="true"    當此屬性設(shè)置為true時纽竣,配置文件如果發(fā)生改變,將會被重新加載,默認值為true蜓氨。 -->
<!--  scanPeriod="30 seconds"   設(shè)置每30秒自動掃描,若沒有指定具體單位則以milliseconds為標準(單位:milliseconds, seconds, minutes or hours)  -->
<!-- debug="false"當此屬性設(shè)置為true時聋袋,將打印出logback內(nèi)部日志信息,實時查看logback運行狀態(tài)语盈。默認值為false舱馅。-->
<configuration scan="true" scanPeriod="30 seconds">
    <!-- 上下文名稱  -->
    <contextName>test</contextName>

    <!-- 存放日志文件路徑 -->
    <property name="Log_Home" value="mylogs/test"/>


    <!-- ch.qos.logback.core.ConsoleAppender 控制臺輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--格式化輸出:%d表示日期,%thread表示線程名刀荒,%-5level:級別從左顯示5個字符寬度%msg:日志消息代嗤,%n是換行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- DEBUG級別 -->
    <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <!-- 級別過濾器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 設(shè)置過濾級別 -->
            <level>DEBUG</level>
            <!-- 用于配置符合過濾條件的操作 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 用于配置不符合過濾條件的操作 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <Encoding>UTF-8</Encoding>
        <File>${Log_Home}/debug/debug.log</File>
        <!-- 根據(jù)時間來制定滾動策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
                ${Log_Home}/debug/debug.%d{yyyy-MM-dd}.%i.log
            </FileNamePattern>
            <!-- 多久后自動清楚舊的日志文件,單位:月 -->
            <MaxHistory>1</MaxHistory>
            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 默認值是 10MB,文檔最大值 -->
                <MaxFileSize>2MB</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <encoder>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
        </encoder>
    </appender>

    <!-- INFO級別 -->
    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <!-- 級別過濾器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 設(shè)置過濾級別 -->
            <level>INFO</level>
            <!-- 用于配置符合過濾條件的操作 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 用于配置不符合過濾條件的操作 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <Encoding>UTF-8</Encoding>
        <File>${Log_Home}/info/info.log</File>
        <!-- 根據(jù)時間來制定滾動策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
                ${Log_Home}/info/info.%d{yyyy-MM-dd}.%i.log
            </FileNamePattern>
            <!-- 多久后自動清楚舊的日志文件,單位:月 -->
            <MaxHistory>1</MaxHistory>
            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 默認值是 10MB,文檔最大值 -->
                <MaxFileSize>2MB</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <encoder>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
        </encoder>
    </appender>


    <!-- WARN級別 -->
    <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <!-- 級別過濾器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 設(shè)置過濾級別 -->
            <level>WARN</level>
            <!-- 用于配置符合過濾條件的操作 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 用于配置不符合過濾條件的操作 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <Encoding>UTF-8</Encoding>
        <File>${Log_Home}/warn/warn.log</File>
        <!-- 根據(jù)時間來制定滾動策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
                ${Log_Home}/warn/warn.%d{yyyy-MM-dd}.%i.log
            </FileNamePattern>
            <!-- 多久后自動清楚舊的日志文件,單位:月 -->
            <MaxHistory>1</MaxHistory>
            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 默認值是 10MB,文檔最大值 -->
                <MaxFileSize>2MB</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <encoder>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
        </encoder>
    </appender>

    <!-- ERROR級別 -->
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <!-- 級別過濾器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 設(shè)置過濾級別 -->
            <level>ERROR</level>
            <!-- 用于配置符合過濾條件的操作 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 用于配置不符合過濾條件的操作 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <Encoding>UTF-8</Encoding>
        <File>${Log_Home}/error/error.log</File>
        <!-- 根據(jù)時間來制定滾動策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
                ${Log_Home}/error/error.%d{yyyy-MM-dd}.%i.log
            </FileNamePattern>
            <!-- 多久后自動清楚舊的日志文件,單位:月 -->
            <MaxHistory>1</MaxHistory>
            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 默認值是 10MB,文檔最大值 -->
                <MaxFileSize>2MB</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <encoder>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
        </encoder>
    </appender>


    <!-- 控制java下面包的打印,沒設(shè)置等級,將繼承上級root的等級 -->
    <logger name="rattlesnake.callback"/>

    <!-- 當前日志總級別為TRACE、DEBUG缠借、INFO干毅、 WARN、ERROR泼返、ALL和 OF -->
    <!-- the level of the root level is set to DEBUG by default.       -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE_DEBUG"/>
        <appender-ref ref="FILE_INFO"/>
        <appender-ref ref="FILE_WARN"/>
        <appender-ref ref="FILE_ERROR"/>
    </root>
</configuration>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硝逢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绅喉,更是在濱河造成了極大的恐慌渠鸽,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柴罐,死亡現(xiàn)場離奇詭異徽缚,居然都是意外死亡,警方通過查閱死者的電腦和手機革屠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門凿试,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人似芝,你說我怎么就攤上這事那婉。” “怎么了党瓮?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵详炬,是天一觀的道長。 經(jīng)常有香客問我寞奸,道長痕寓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任蝇闭,我火速辦了婚禮呻率,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呻引。我一直安慰自己礼仗,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著元践,像睡著了一般韭脊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上单旁,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天沪羔,我揣著相機與錄音,去河邊找鬼象浑。 笑死蔫饰,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的愉豺。 我是一名探鬼主播篓吁,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蚪拦!你這毒婦竟也來了杖剪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤驰贷,失蹤者是張志新(化名)和其女友劉穎盛嘿,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體括袒,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡次兆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了箱熬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片类垦。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡狈邑,死狀恐怖城须,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情米苹,我是刑警寧澤糕伐,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站蘸嘶,受9級特大地震影響良瞧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜训唱,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一褥蚯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧况增,春花似錦赞庶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澜薄。三九已至,卻和暖如春摊册,著一層夾襖步出監(jiān)牢的瞬間肤京,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工茅特, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忘分,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓温治,卻偏偏與公主長得像饭庞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子熬荆,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容