• logback日志配置


    第一步:加入jar包。要加入slf4j和logback的jar包,slf4j需要的jar包为slf4j-api,logback需要2个jar包(logback-classiclogback-core),如果需要保存数据库还需druidmysql-connector-java(以mysql为例)

        slf4j下载地址:https://www.slf4j.org/download.html

        logback下载地址:https://logback.qos.ch/download.html

        下载后解压,选择所需要的4个jar包即可。

      如果是maven项目只需依赖:

      

    <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
    </dependency>

    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.9</version>
    </dependency>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
    </dependency>

    第二步:在项目src中加入配置文件:logback.xml(没有该文件则使用默认)(maven项目放在resources里)

    我的项目结构:

    第三步:使用。

    如果需要用到数据库保存日志,需要建立三个表

    CREATE TABLE logging_event
    (
      timestmp         BIGINT NOT NULL,
      formatted_message  TEXT NOT NULL,
      logger_name       VARCHAR(254) NOT NULL,
      level_string      VARCHAR(254) NOT NULL,
      thread_name       VARCHAR(254),
      reference_flag    SMALLINT,
      arg0              VARCHAR(254),
      arg1              VARCHAR(254),
      arg2              VARCHAR(254),
      arg3              VARCHAR(254),
      caller_filename   VARCHAR(254) NOT NULL,
      caller_class      VARCHAR(254) NOT NULL,
      caller_method     VARCHAR(254) NOT NULL,
      caller_line       CHAR(4) NOT NULL,
      event_id          BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
    );
    
    CREATE TABLE logging_event_property
    (
      event_id     BIGINT       NOT NULL,
      mapped_key   VARCHAR(254) NOT NULL,
      mapped_value TEXT,
      PRIMARY KEY (event_id, mapped_key),
      FOREIGN KEY (event_id) REFERENCES logging_event (event_id)
    );
    
    
    CREATE TABLE logging_event_exception
    (
      event_id   BIGINT       NOT NULL,
      i          SMALLINT     NOT NULL,
      trace_line VARCHAR(254) NOT NULL,
      PRIMARY KEY (event_id, i),
      FOREIGN KEY (event_id) REFERENCES logging_event (event_id)
    );

    logback.xml配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
       scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
      scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
      debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
    -->
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
    
        <!-- appender指定日志的输出类型,可以是控制台、文件或数据库等 -->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <Encoding>UTF-8</Encoding>
            <encoder>
                <!-- pattern指定日志的输出格式 -->
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %C - %m%n</pattern>
            </encoder>
        </appender>
    
        <!-- 指定日志输出类型,这里指定为输出到文件-->
        <appender name="file" class="ch.qos.logback.core.FileAppender">  
            <!-- <file>: 指定日志的路径以及文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值 -->    
            <file>demo/logs/test.log</file>
            <!-- <append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true-->         
            <append>true</append>  
            <!-- <encoder>: 指定日志的输出格式-->      
            <encoder>          
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %C - %m%n</pattern>        
            </encoder>     
        </appender>
    
        <!-- 配置日志输出类型为滚动日志, -->
        <!-- 下面的配置为每天生成一个日志文件,保存30天的日志文件-->
        <appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 配置滚动策略,当发生滚动时,决定RollingFileAppender的行为,TimeBasedRollingPolicy
             是比较常用的一种滚动策略,它根据时间来制定滚动策略-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 指定滚动生成文件的文件名,并加上日期,例如:test_2018-11-13.log -->
                <fileNamePattern>demo/logs/test_%d{yyyy-MM-dd}.log</fileNamePattern>
                <!-- 决定保留的归档文件的最大数量,这里只保留30天的日志文件 -->
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <!-- 指定日志的输出格式 -->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %C - %m%n</pattern>
            </encoder>
        </appender>
    
        <!-- 配置日志输出类型为保存到数据库,
        需要在数据库中先建立logging_event、logging_event_property、logging_event_exception三张表 -->
        <appender name="mysql" 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://localhost:3306/logback?useUnicode=true&amp;useSSL=true&amp;characterEncoding=utf8</url>
                    <username>root</username>
                    <password>root</password>
                </dataSource>
            </connectionSource>
        </appender>
    
        <!-- 输出到控制台 -->
        <appender name="filterConsole" class="ch.qos.logback.core.ConsoleAppender">
            <!-- 配置级别过滤器,LevelFilter过滤器会根据onMatch和onMismatch属性接受或拒绝事件,
             这里表示直接受INFO级别的日志-->
            <filter class="ch.qos.logback.classic.filter.LevelFilter" >
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
    
            <!-- 配置临界值过滤器,ThresholdFilter过滤掉低于指定临界值的事件,
             这里表示只接受INFO及更高级别的日志-->
            <!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>-->
    
            <!-- 指定输出格式 -->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %C - %m%n</pattern>
            </encoder>
        </appender>
    
        <!-- logger其实表示是是root根的子级,
        主要用于设置某一个包或具体的某一个类的日志打印级别 -->
        <!-- 这里这是一个logger将controller包下的类在使用日子时将信息输出到控制台
         additivity="false" 表示日志信息只在当前logger输出,不会延续到父级root继续输出,
         默认值为true,表示在当前logger输出完成之后,继续执行root根logger的输出-->
        <logger name="edu.nf.demo.Main" level="debug" additivity="true">
            <appender-ref ref="console"/>
        </logger>
        <!-- 这里这是一个logger将controller包下的类在使用日子时将信息输出到文件 -->
        <logger name="edu.nf.demo.Main" level="info" additivity="true">
            <appender-ref ref="file"/>
        </logger>
    
        <!-- 配置logger的根,并通过level制定输出级别
         输出级别从小到大的顺序为:TRACE < DEBUG < INFO < WARN < ERROR,
         例如,如果使用了info级别,则应用程序中所有低于info级别的日志信息(如debug)将不会被打印出来-->
        <root level="DEBUG">
            <!--引用输出类型输出类型-->
            <!--<appender-ref ref="console"/>-->
            <!--<appender-ref ref="file"/>-->
            <!--<appender-ref ref="rollFile"/>-->
            <appender-ref ref="mysql"/>
            <!--<appender-ref ref="filterConsole"/>-->
        </root>
    </configuration>

    Main:

    package edu.nf.demo;
    
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * @author hh
     * @Date 2018/11/16
     */
    public class Main {
        private static final Logger logger = LoggerFactory.getLogger(Main.class);
        public static void main(String[] args) {
            logger.trace("trace...");
            logger.debug("debug...");
            logger.info("info...");
            logger.warn("warn...");
            logger.error("error...");
        }
    }
    View Code

    运行结果:

    控制台:

    文件:

    数据库:


    与Spring MVC整合

    1. 依赖logback的扩展包

      <!-- https://mvnrepository.com/artifact/org.logback-extensions/logback-ext-spring -->
      <dependency>
         <groupId>org.logback-extensions</groupId>
         <artifactId>logback-ext-spring</artifactId>
         <version>0.1.4</version>
      </dependency>
    2. 在web.xml配置LogbackConfigListener,并配置logback.xml路径

      <listener>
      <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
      </listener>
      <context-param>
      <param-name>logbackConfigLocation</param-name>
      <param-value>classpath:logback.xml</param-value>
      </context-param>

  • 相关阅读:
    Servlet3.0之五:servlet3.0下的web.xml
    RESTLET开发实例(二)使用Component、Application的REST服务
    并发容器之ConcurrentLinkedDeque
    script的onerror事件支持情况调查
    纯CSS后台框架
    浏览器对width与height的最大值限制
    DOM系统中的各种队列
    跨域的异步请求四
    JSON parse在各浏览器的兼容性列表
    在IE6~8下创建HTML5新标签
  • 原文地址:https://www.cnblogs.com/hhmm99/p/9967767.html
Copyright © 2020-2023  润新知