• logback错误日志发送邮件


    logback

    一、介绍

    logback是由log4j的作者开发的一个开源日志组件,用以替代log4j。

    logback由3个部分组成:

    ♦ logback-core (基础模块)

    ♦ logback-classic (log4j改进版,实现slf4j)

    ♦ logback-access (与servlet交互的模块,提供通过Http来访问日志的功能)

    二、logback对比log4j

    1. 性能

    logback重写内核,性能提升,内存加载小。

    2. 充分测试

    以年为单位的测试时间。

    3. logback-classic原生实现slf4j

    log4j还需要一个中间转换层。

    4. 文档内容丰富

    官网200pages+。

    5.  XML配置文件热加载

    logback-classic能自动重新加载配置文件。

    6. 从I/O错误中优雅恢复

    RollingFileAppender能够非常友好地从I/O异常中恢复。

    7. 自动删除日志归档

    可以控制日志文件的最大数量或超时删除时间。

    8. 自动压缩日至归档

    自动压缩已经打出来的日志文件,压缩过程应用不受影响。

    9. 配置文件适应不同环境

    加入条件判断,区分开发,测试,生产。

    10. SiftingAppender

    可筛选Appender。

    11. 异常栈信息带有包信息

    打堆栈树日志时,有包的信息。

    三、logback依赖jar

    ♦ slf4j-api

    ♦ logback-core

    ♦ logback-classic

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.9</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.0.13</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.3</version>
    </dependency>

     logback-mail

    一、发送邮件依赖jar

    ♦ mail

    ♦ janino

    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.4</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.janino</groupId>
        <artifactId>janino</artifactId>
        <version>2.7.8</version>
    </dependency>

    二、配置logback.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <!-- 控制台输出 -->
        <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>DEBUG</level>
            </filter>
            <encoder>
                <!-- 格式化输出:%date(d%)表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度, -->
    <!-- %logger{36}表示logger名字最长36个字符,否则按照句点分割,%msg:日志消息,%n是换行符
    --> <pattern>%date{MM:dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 输出DEBUG级别日志文件的appender --> <appender name="RollingFileRun" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> <File>/data/tomcat/runtime/debug.log</File> <!-- 按每小时滚动文件,如果一个小时内达到100M也会滚动文件, 滚动文件将会压缩成zip格式, 最多保留672个滚动文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/data/tomcat/runtime/debug-%d{yyyy-MM-dd_HH}.%i.zip</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>672</maxHistory> </rollingPolicy> <encoder> <!-- 格式化输出:%date(d%)表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度, -->
    <!-- %logger{36}表示logger名字最长36个字符,否则按照句点分割,%msg:日志消息,%n是换行符
    --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 输出ERROR级别日志文件的appender --> <appender name="RollingFileError" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <File>/data/tomcat/error/error.log</File> <!-- 按每小时滚动文件,如果一个小时内达到100M也会滚动文件, 滚动文件将会压缩成zip格式, 最多保留672个滚动文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/data/tomcat/error/error-%d{yyyy-MM-dd_HH}.%i.zip</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>672</maxHistory> </rollingPolicy> <encoder> <!-- 格式化输出:%date(d%)表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度, -->
    <!-- %logger{36}表示logger名字最长36个字符,否则按照句点分割,%msg:日志消息,%n是换行符
    --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- SMTP server的地址,必需指定。如网易126的SMTP服务器地址是: smtp.126.com --> <property name="smtpHost" value="smtp.126.com"/> <!-- SMTP server的端口地址。默认值:25 --> <property name="smtpPort" value="25"/> <!-- 发送邮件账号 --> <property name="username" value="********@126.com"/> <!-- 发送邮件密码(此密码为网易126邮箱的客户端授权密码,不是邮箱登录密码,126邮箱需要开启POP3/SMTP服务、IMAP/SMTP服务才可使用) --> <property name="password" value="********"/> <!-- 如果设置为true,appender将会使用SSL连接到日志服务器。默认值:false --> <property name="SSL" value="false"/> <!-- 指定发送到那个邮箱,可设置多个<to>属性,指定多个目的邮箱,收件人账号多个可以逗号隔开 --> <property name="email_to" value="********@126.com"/> <!-- 指定发件人名称。 --> <property name="email_from" value="********@126.com" /> <!-- 指定emial的标题,它需要满足PatternLayout中的格式要求。如果设置成“Log: %logger - %msg”,就案例来讲,则发送邮件时, -->
    <!-- 标题为“【Error】: com.****.****Task - null.equals”。
    --> <property name="email_subject" value="【Error】: %logger - %msg" /> <!-- 邮件发送的appender --> <appender name="Email" class="ch.qos.logback.classic.net.SMTPAppender"> <smtpHost>${smtpHost}</smtpHost> <smtpPort>${smtpPort}</smtpPort> <username>${username}</username> <password>${password}</password> <asynchronousSending>false</asynchronousSending> <SSL>${SSL}</SSL> <to>${email_to}</to> <from>${email_from}</from> <subject>${email_subject}</subject> <!-- html格式 --> <layout class="ch.qos.logback.classic.html.HTMLLayout"> <Pattern>%date%level%thread%logger{0}%line%message</Pattern> </layout> <!-- 这里采用等级过滤器,指定等级相符才发送,这里指定ERROR级别才发送 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <!-- 每个电子邮件只发送一个日志条目 --> <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker"> <bufferSize>1</bufferSize> </cyclicBufferTracker> </appender> <!-- 日志输出,设置级别,指定appender --> <root level="DEBUG"> <appender-ref ref="Console"/> <appender-ref ref="RollingFileRun"/> <appender-ref ref="RollingFileError"/> <appender-ref ref="Email"/> </root> </configuration>

    三、设置网易126邮箱

    四、使用

    logger.error("null.equals");

    五、邮件截图

  • 相关阅读:
    SlickEdit 中 GDB 调试时SIG32 使得无法跟踪的问题 解决方法
    ln与mount
    ubuntu12.04 的 root 用户显示 中文 和 默认显示中文的方法
    ASP.NET MVC控制器作用
    ASP.NET管道模型
    第二章MVC框架如何截获请求
    第一章MVC与WebForms处理请求的区别
    asp.net运行原理一
    一个通配符引起的错误
    关于权限
  • 原文地址:https://www.cnblogs.com/lsysy/p/9935551.html
Copyright © 2020-2023  润新知