日志框架

日志框架

1. 概述

是一套能实现日志输出的工具包 ;

System.out?

1). 代码侵入性高, 一旦编写的输出语句 , 该语句会一直输出 , 直到被删除/注释 ;

2). 输出的信息不详细 , 传递什么内容, 就输出什么内容 ;

3). 功能单一 , 只能是往控制台输出 ;

2. 主流日志框架

日志框架具有的能力 :

1). 定制输出目标

2). 运行时选择性输出

3). 定制输出格式

4). 灵活的配置

5). 携带上下文信息


| 日志门面                      | 日志实现                 |
| ----------------------------- | ------------------------ |
| JCL(apache commons-logging) | Log4j                    |
| jboss-logging                 | Log4j2                   |
| SLF4J                         | Logback                  |
|                               | JUL(java.util.logging) |

日志门面 :
slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、logback);

日志实现 :

1). log4j是apache实现的一个开源日志组件 ;

2). logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现 ;

3). Log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解决了一些死锁的bug,而且配置更加简单灵活 ;

为什么需要日志接口,直接使用具体的实现不就行了吗?

接口用于定制规范,可以有多个实现,使用时是面向接口的,即直接和接口交互,不直接使用实现,所以可以任意的更换实现而不用更改代码中的日志相关代码。

在这里插入图片描述

3. 配置使用

3.1 slf4j - log4j
3.1.1 pom. xml
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.6</version>
</dependency>  
3.1.2 log4j.properties
log4j.rootLogger=info,A2

log4j.appender.A2=org.apache.log4j.ConsoleAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

#for file
log4j.appender.files.layout=org.apache.log4j.PatternLayout
log4j.appender.files.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.files=org.apache.log4j.RollingFileAppender
log4j.appender.files.File=D:/example.log
log4j.appender.files.MaxFileSize=100KB

#for file every day
log4j.appender.everyday=org.apache.log4j.DailyRollingFileAppender
log4j.appender.everyday.layout=org.apache.log4j.PatternLayout
log4j.appender.everyday.File=myloggers.log
log4j.appender.everyday.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.everyday.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.everyday.MaxFileSize=1KB

#for database
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.BufferSize=10
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=2143
log4j.appender.DATABASE.sql=INSERT INTO tbl_log  VALUES ('%m')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout

#set log type for package
#log4j.category.cn.itcasts.crm=error
#log4j.category.cn.itcast.wf=debug
3.1.3 代码
private static Logger logger = LoggerFactory.getLogger(MainTest.class);

public static void main(String[] args) {
    
    logger.trace("trace....");
    
    logger.debug("debug....");
    
    logger.info("info....");
    
    logger.warn("warn....");
    
    logger.error("error....");
    
}
3.1.4 日志级别

SLF4J 支持的日志级别 :

trace

debug

info

warn

error

日志级别, 从上到下, 越来越高 ; 控制台输出的日志为, 设置的级别及以上级别的日志 ;

3.2 slf4j-logback
依赖
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.22</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.6</version>
</dependency>
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 name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} | %-5level | %class | %thread | %method | %-3line | %msg %n
            </pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logs.dir}/logback-test.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <FileNamePattern>${logs.dir}/logback-test.%i.log</FileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>1</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>30MB</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <charset>UTF-8</charset>
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} | %level | %class | %thread | %method | %line | %msg %n
            </Pattern>
        </encoder>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="stdout" />
        <!--<appender-ref ref="file" />-->
    </root>

</configuration>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值