logback的使用和logback.xml详解

更新记录

2017-02-06 :1.需要更改的参数提取为变量,如果是SpringBoot项目,可以完全写在配置文件,可去看减轻茶的配置 ;2.定义控制台自定义颜色,Eclipse需要安装ANSI插件

2017-12-28 :修改添加日志记录到数据库,去除1.2.3版本不兼容的保存日志文件的file标签 ,

<File>${LOG_HOME}/info.duduerp.log</File>

代码去除。

Druid连接,原代码中默认是用Druid,注意更改连接的数据库

<appender name="dbAppender" class="ch.qos.logback.classic.db.DBAppender">
    <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
        <dataSource class="com.alibaba.druid.pool.DruidDataSource">
            <driverClassName>com.mysql.jdbc.Driver</driverClassName>
            <!--测试-->
            <url>jdbc:mysql://数据库地址</url>
            <!--线上-->
            <!--<url>jdbc:mysql://数据库地址</url>-->
            <username>账号</username>
            <password>密码</password>
        </dataSource>
    </connectionSource>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>WARN</level>
    </filter>
</appender>

C3P0连接

<appender name="dbAppender" class="ch.qos.logback.classic.db.DBAppender">
    <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
        <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <driverClass>com.mysql.jdbc.Driver</driverClass>
            <!--测试10.31线上和线下是同一个数据库-->
            <jdbcUrl>jdbc:mysql://数据库连接</jdbcUrl>
            <!--线上-->
            <!--<jdbcUrl>jdbc:mysql://数据库连接</jdbcUrl>-->
            <user>zha</user>
            <password>logrizhi200LM</password>
        </dataSource>
    </connectionSource>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>warn</level>
    </filter>
</appender>

一、简介

日志记录器(Logger)的行为是分等级的。如下所示:
分为OFF>ERROR>WARN>INFO>DEBUG>TRACE >ALL或者您定义的级别。建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。
比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来,也是说大于等于的级别的日志才输出。

先看下这个logback使用详解:http://aub.iteye.com/blog/1101222

二、具体配置

logback.xml文件配置(建议复制到文本编辑器中查看,可直接使用,将所有duduerp改成自己项目名称,还有<logger name="com.lemo.erp" level="DEBUG" />这个改成自己包,添加到日志系统数据库连接名要对应):

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

<configuration debug="false">
    <property name="PRODUCT_NAME" value="duduerp"/>
    <!-- logback的级别顺序 TRACE < DEBUG < INFO < WARN < ERROR-->
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="/opt/myapp/logs/${PRODUCT_NAME}"/>
    <!--定义日志格式化输出格式:%d表示日期,%thread表示线程名,%level:级别从左显示5个字符,%logger{100}输出日志的类,100代表包名加类名的总长度限制,%L:代码中的行号,%msg:日志消息,%n是换行符-->
    <property name="CONSOLE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} | %highlight(%-5level) --- %yellow([%-15.15thread]) | %cyan(%50.50logger{49}) %boldRed(:%-4L) | %msg%n"/>
    <!--文件日志输出格式-->
    <property name="FILE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} | %-5level --- [%-15.15thread] | %-50.50logger{49} :%-4L | %msg%n"/>

    <!--数据库配置文件-->
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <!--测试-->
    <property name="url" value="数据库连接"/>
    <!--线上-->
    <!--<property name="url" value="数据库连接"/>-->
    <property name="username" value="账号"/>
    <property name="password" value="密码"/>

    <!-- 控制台输出 -->
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <layout name="ch.qos.logback.classic.PatternLayout">
            <!-- 日志中的输出格式 -->
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </layout>
    </appender>

    <!-- 每天输入一个日志文件 滚动输出-->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--
        <onMatch>:用于配置符合过滤条件的操作,我们这里用的符合就接受
        <onMismatch>:用于配置不符合过滤条件的操作,我们这里不符合就抛弃
            如果返回DENY,那么记录事件立即被抛弃,不再经过剩余过滤器;
            如果返回NEUTRAL,那么有序列表里的下一个过滤器会接着处理记录事件;
            如果返回ACCEPT,那么记录事件被立即处理,不再经过剩余过滤器。
        -->
        <!-- 此日志文件只记录INFO级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <!-- 日志中的输出格式 -->
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <!--滚动策略 按照时间来滚动-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件路径,文件名修改为自己项目的名字-  -->
            <fileNamePattern>${LOG_HOME}/info.${PRODUCT_NAME}%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 保存时间(天) -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 每天输入一个日志文件 滚动输出-->
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--输出的日志级别是大于或等于此级别的日志信息,这里输出WARN和ERROR-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
        <encoder>
            <!-- 日志中的输出格式 -->
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <!--滚动策略 按照时间来滚动-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件路径,文件名修改为自己项目的名字-  -->
            <fileNamePattern>${LOG_HOME}/error.${PRODUCT_NAME}%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 保存时间(天) -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <!--添加到日志系统-->
    <appender name="dbAppender" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
            <dataSource class="com.alibaba.druid.pool.DruidDataSource">
                <driverClassName>${driverClassName}</driverClassName>
                <url>${url}</url>
                <username>${username}</username>
                <password>${password}</password>
            </dataSource>
        </connectionSource>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
    </appender>
    <!--
    如果level没写,继承root的级别
    如果没有设置additivity,默认为true,将此logger的打印信息向上级传递;
    如果没有设置appender,此loger本身不打印任何信息。
    -->
    <!--设置我们项目文件夹下的日志-->
    <logger name="com.lemo.erp" level="DEBUG" />

    <!--log4jdbc-->
    <!--多余日志关闭
    sqlonly是记录系统执行过的sql语句
    sqltiming是记录sql执行的时间,可以分析耗时的sql语句(也会显示sql语句,sqlonly可以不显示)
    audit是记录除了ResultSet外的所有JDBC调用情况。一般不需要
    resultset是记录返回结果集信息
    connection记录数据库连接和释放信息,可记录当前的数据库连接数,便于诊断连接是否释放
    -->
    <logger name="jdbc.sqlonly" level="OFF"/>
    <logger name="jdbc.sqltiming" level="INFO"/>
    <logger name="jdbc.audit" level="OFF"/>
    <logger name="jdbc.resultset" level="OFF"/>
    <logger name="jdbc.connection" level="OFF"/>

    <!-- 级别定义,输出端内容输出级别,大于或等于root定义的level,方能在输出端输出 -->
    <!--如果想在控制台看DEBUG级别日志改成DEBUG,默认DEBUG,不区分大小写-->
    <root level="INFO">
        <!--只能打印root level当前和以上级别的日志-->
        <appender-ref ref="consoleLog"/>
        <!--只能打印INFO级别的日志-->
        <appender-ref ref="fileInfoLog"/>
        <!--只能打印WARN和以上级别的日志的日志-->
        <appender-ref ref="fileErrorLog"/>
        <!--添加到日志系统-->
        <appender-ref ref="dbAppender"/>
    </root>

</configuration>

log4jdbc日志框架介绍:http://badqiu.iteye.com/blog/743100

配置成功生成的日志文件


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值