zoukankan      html  css  js  c++  java
  • logback.xml的使用,将日志异步保存到数据库中

    想要把日志异步保存到数据库中,首先需要创建一个数据库,然后创建三张固定的表:

    https://github.com/xiaorenwu-dashijie/logback.git

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="true">
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
        <property name="LOG_HOME" value="/home/logs" />
        <!-- 控制台输出 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!-- 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
                <pattern>%X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{150} - %msg%n</pattern>
            </encoder>
        </appender>
        <!-- info日志 appender  -->  
        <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                <!-- 按天回滚 daily -->  
                <fileNamePattern>${LOG_HOME}//security-info-%d{yyyy-MM-dd}.log</fileNamePattern>  
                <!-- 日志最大的历史 60天 -->  
                <maxHistory>60</maxHistory>  
            </rollingPolicy>  
            <encoder>  
                <pattern>%X{ip} %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  
            </encoder>  
            <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->  
                <level>INFO</level>  
                <onMatch>ACCEPT</onMatch>  
                <onMismatch>DENY</onMismatch>  
            </filter>  
        </appender>
        
         <!-- 出错日志 appender  -->  
        <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                <!-- 按天回滚 daily -->  
                <!-- log.dir 在maven profile里配置 -->  
                <fileNamePattern>${LOG_HOME}//security-error-%d{yyyy-MM-dd}.log</fileNamePattern>  
                <!-- 日志最大的历史 60天 -->  
                <maxHistory>60</maxHistory>  
            </rollingPolicy>  
            <encoder>  
                <pattern>%X{ip} %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  
            </encoder>  
            <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->  
                <level>ERROR</level>  
                <onMatch>ACCEPT</onMatch>  
                <onMismatch>DENY</onMismatch>  
            </filter>  
        </appender>
    
        <!--日志异步到数据库 -->
        <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
            <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
                <dataSource class="org.apache.tomcat.jdbc.pool.DataSource">
                    <driverClassName>com.mysql.jdbc.Driver</driverClassName>
                    <url>jdbc:mysql://**.***.*.**:3306/log_repository?characterEncoding=UTF-8</url>
                    <username>*****</username>
                    <password>*****</password>
                </dataSource>
            </connectionSource>
        </appender>
    
        <!-- 将com.logback.test.dao包下debug级别的sql日志输出到控制台和文件中 -->
        <!-- additivity属性为false,表示此loger的打印信息不再向上级(root)传递;若为true,则控制台就会输出两遍dao包下的日志 -->
        <logger name="com.logback.test.dao" level="DEBUG" additivity="false">
            <appender-ref ref="STDOUT" />
        </logger>
        <!-- 将com.logback.test包下INFO级别的日志记录到数据库中 -->
        <logger name="com.logback.test" level="INFO" additivity="true">
            <appender-ref ref="DB"/>
        </logger>
        <!-- 将所有包下debug级别的日志输出到控制台和文件中 -->
        <root level="INFO">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="INFO" />
            <appender-ref ref="ERROR"/>
        </root>
    </configuration>

    在记录日志的时候,我们可能有这种需求,对于每个记录除了知道日志信息外,也要记录访问该系统的IP。

    MDC便提供了这个功能,只需要在代码中添加下面的方法即可

    MDC.put("ip", ip);

    在配置文件中用下面的方式获取即可

    %X{ip} 
  • 相关阅读:
    7、NFC技术:让Android自动运行程序
    6、Android中的NFC技术
    5、NFC概述
    Delphi XE7中开发安卓程序一些有用的帮助资源
    Delphi开发安卓程序的感受
    Tomcat绿色版启动"startup.bat"一闪问题的解决方法!
    Delphi判断字符串中是否包含汉字,并返回汉字位置
    Delphi的DLL里如何实现定时器功能?
    Delphi的DLL里如何实现定时器功能?
    VS2013如何添加LIb库及头文件的步骤
  • 原文地址:https://www.cnblogs.com/java-spring/p/8360109.html
Copyright © 2011-2022 走看看