Log4j+Commons-Logging + LogBack+SLF4J

1、日志的认知

日志:记录程序运行的状况及步骤

分类:

1、数据库日志:数据库自身记录数据的操作情况

delete、truncate删除的区别? delete删除数据会写日志,能够通过日志恢复所删除的数据(花钱买服务功能)

2、业务日志:记录程序运行的关键步骤,或过程,目的是追踪、追责

3、异常日志:大型系统里调错使用

常见输出位置:控制台、文件(重要)

日志的级别:什么时候输出日志 由低到高

TRACE、DEBUG、INFO、WARN、ERROR、FATAL


2、Log4j+Commons-Logging 日志框架

Log4j:用于记录日志

Commons-Logging: 用于控制日志的记录情况---日志文件达到多少K之后,需要新建一个文件

---根据日期创建日志文件

---日志的回滚等

1、新建项目

2、添加依赖

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

3、编写配置文件

【说明】如果单纯使用Log4j,只需创建log4j.properties配置文件即可

# Global logging configuration
log4j.rootLogger=DEBUG, stdout,logfile
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=qf.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %F %p %m%n

测试

package com.qf.log2105.test;


import org.apache.log4j.Logger;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        //获取日志对象
        Logger logger=Logger.getLogger(Test.class);
        System.out.println("请输入第一个数:");
        int num1=input.nextInt();
        logger.debug("用户输入了第一个数:"+num1);
        System.out.println("请输入第二数:");
        int num2=input.nextInt();
        logger.debug("用户输入了第二数:"+num2);
        int result=num1+num2;
        logger.debug("和为:"+result);
        System.out.println("计算结果为:"+result);
    }
}

【说明】目前的配置文件中,不仅要配置Log4j,还要配置Commons-Logging的信息,所以使用XML文件 log4j.xml

xml文件名必须为log4j.xml

<?xml version="1.0"  encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER"
        "http://org/apache/log4j/xml/log4j.dtd">
<log4j:configuration>
    <!--日志输出到控制台-->
    <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
        <!--设置输出的格式-->
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                   value="%d{yyyy-MM-dd hh:mm:ss,SSS} [%c]-[%p] %m%n"/>
        </layout>
    </appender>
    <!--日志输出到文件-->
    <appender name="myFile" class="org.apache.log4j.RollingFileAppender">
        <!--日志文件的位置-->
        <param name="File" value="d:/log2105.log"/>
        <!--文件追加写入-->
        <param name="Append" value="true"/>
        <!--日志文件的大小,以kb为单位-->
        <param name="MaxFileSize" value="1kb"/>
        <!--新文件的数量:备份的数量-->
        <param name="MaxBackupIndex" value="2"/>
        <!--设置格式-->
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss,SSS} [%c]-[%p] %m%n"/>
        </layout>
    </appender>
    <!--输出到文件:每天创建新的日志文件-->
    <appender name="myFile2" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="d:/log210502.log"/>
        <param name="Append" value="true"/>
        <!--设置格式-->
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss,SSS} [%c]-[%p] %m%n"/>
        </layout>
    </appender>
    <!--进行根设置-->
    <root>
        <!--设置日志输出的优先级-->
        <priority value="debug"></priority>
        <appender-ref ref="myConsole"/>
        <appender-ref ref="myFile"/>
        <appender-ref ref="myFile2"/>
    </root>
</log4j:configuration>


3、LogBack+SLF4J 日志框架

SLF4J:用于记录日志

LogBack:用于日志的控制,大小、日期、回滚等

1、添加依赖

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

2、编写配置文件logback.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
scan设置为true的时候,当此配置文件发生更改后,将会自动被重新加载,默认就是true
scanPeriod:当scan设置为true时,检测文件是否被修改的时间间隔,默认单位是毫秒
debug:设置为true时,将打印出logback内部日志信息,默认为false
-->
<configuration scan="true" scanPeriod="60 seconds" debug="true">
    <!--
    声明变量: log.path  表示日志文件的存储位置
              console_log_pattern  日志的格式
    -->
    <property name="log.path" value="d:/log"></property>
    <property name="console_log_pattern"
              value="%d{yyyy-MM-dd hh:mm:ss,SSS} |-[%-5p] 在 %logger.%M[行:%L]-%m%n"></property>

    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--设置输出级别-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <value>debug</value>
        </filter>
        <!--设置格式及编码方式-->
        <encoder>
            <!--格式-->
            <Pattern>${console_log_pattern}</Pattern>
            <!--设置字符-->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!--日志输出到文件中-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--配置日志文件的名字:初始文件的名字-->
        <file>${log.path}/haotian.log</file>
        <!--配置日志的格式、字符编码-->
        <encoder>
            <!--格式-->
            <Pattern>${console_log_pattern}</Pattern>
            <!--设置字符-->
            <charset>UTF-8</charset>
        </encoder>
        <!--配置日志的策略:按日期、按大小
        按大小:当日志文件超出指定大小时,则创建新的日志文件,在新文件中继续写入日志
        按日期:按日期创建新文件,同时兼容按大小创建文件
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--配置文件的名字 %i 文件序号,从0开始-->
            <fileNamePattern>${log.path}/haotian-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--设置文件的最大体量-->
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>3kb</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--设置日志保留的天数,如果不设置就一直保存,如果设置为1,则保留前1天的日志-->
            <maxHistory>1</maxHistory>
        </rollingPolicy>
    </appender>
    <root level="debug">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>
</configuration>

3、应用日志

package com.qf.log02.test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //获取日志对象
        Logger logger= LoggerFactory.getLogger(Test.class);
        Scanner input=new Scanner(System.in);
        //获取日志对象
        System.out.println("请输入第一个数:");
        int num1=input.nextInt();
        logger.debug("用户输入了第一个数:"+num1);
        System.out.println("请输入第二数:");
        int num2=input.nextInt();
        logger.debug("用户输入了第二数:"+num2);
        int result=0;
        try{
            result=num1+num2;
        }catch (Exception ex){
            //红色文字输出
            logger.error("发生异常,异常信息:"+ex.getMessage());
        }
        logger.debug("和为:"+result);
        System.out.println("计算结果为:"+result);
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值