allTypes_log4j 总结

git地址:
https://github.com/wei198621/log4j_allTypes
学习文章:
https://blog.youkuaiyun.com/qq_34294121/article/details/100111995
编程不良人视频介绍log4j
https://blog.youkuaiyun.com/wei198621/article/details/110505072

五种方式对比图

还有第六种 引用 lombok ,直接写 log
import lombok.extern.slf4j.Slf4j;
log.info(“客户端, 尝试第{}次重连…”, ++retry);
在这里插入图片描述

log4j

1. 配置文件名称
      resources/log4j.properties
2. 导入jar包
    <!--log4j只有一个引用-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

3. 打印日志
     按照本示例log4j.properties 中的配置,会打印到程序根目录 的同级目录 名为 log_log4j 的文件夹下

4. main 函数 中的静态函数
    private static org.apache.log4j.Logger logger= org.apache.log4j.Logger.getLogger(App.class);  // 获取logger实例




主方法

package com.tz.leo.log;

import org.apache.log4j.Logger;

/**
 * Hello world!
 *
 */
public class App
{
    private static Logger logger= Logger.getLogger(App.class);  // 获取logger实例
    public static void main( String[] args )
    {
        logger.info("********************************************");
        logger.info("*********** logged by log4j *********");
        logger.debug("调试debug信息");
        logger.info("普通Info信息");
        logger.warn("警告warn信息");
        logger.error("报错error信息");
        logger.fatal("严重错误fatal信息");

        // logger.error("报错信息", new IllegalArgumentException("非法参数"));
        int i=0;
        while(i<10){
            logger.debug(" RollingFile 调试debug信息");
            logger.debug(" RollingFile 调试debug信息");
            logger.debug(" RollingFile 调试debug信息");
            logger.debug(" RollingFile 调试debug信息");
            logger.debug(" RollingFile 调试debug信息");
            i++;
        }

        logger.info("********************************************");
    }
}

log4j.properties 配置文件




#输出格式有四种   HTMLLayout 等 的输出 一般不用
#1. PatternLayout    自定义格式 常用
#2. HTMLLayout
#3. SimpleLayout
#4. TTCCLayout
#log4j.appender.Console=org.apache.log4j.ConsoleAppender
#log4j.appender.Console.layout=org.apache.log4j.TTCCLayout


#
#PatternLayout是我们以后推荐使用的,很灵活;
#有个ConversionPattern属性,灵活配置输出属性:
#%m 输出代码中指定的消息;
#%M 输出打印该条日志的方法名;
#%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
#%r 输出自应用启动到输出该log信息耗费的毫秒数;
#%c 输出所属的类目,通常就是所在类的全名;
#%t 输出产生该日志事件的线程名;
#%n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
#%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921;
#%l 输出日志事件的发生位置,及在代码中的行数;

log4j.rootLogger=DEBUG, Console ,File ,DailyRollingFile ,RollingFile ,IFILE
#,jdbc
#



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

#File   一般自己测试用,没有任何的逻辑,一直累加         C://log4j//logFile.log
log4j.appender.File = org.apache.log4j.FileAppender
log4j.appender.File.File = ./log_log4j/logFile.log
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n

#DailyRollingFile     每天一个
log4j.appender.DailyRollingFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.DailyRollingFile.File = ./log_log4j/logDailyRollingFile.log
log4j.appender.DailyRollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.DailyRollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n

#RollingFile         循环累加  本示例最多三个  每个UI大1kb  (正常应该是100M这个量级,365)
log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender
log4j.appender.RollingFile.File = ./log_log4j/logRollingFile.log
log4j.appender.RollingFile.MaxFileSize=1KB
log4j.appender.RollingFile.MaxBackupIndex=3
log4j.appender.RollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n


#ERRORFile

log4j.appender.IFILE = org.apache.log4j.FileAppender
log4j.appender.IFILE.File = ./log_log4j/INFO_ONLY.log
log4j.appender.IFILE.layout = org.apache.log4j.PatternLayout
log4j.appender.IFILE.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
log4j.appender.IFILE.Threshold = WARN  
log4j.appender.IFILE.append = true  

#数据库输出      ---配置了,没有效果
#log4j.appender.jdbc=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.jdbc.driver=com.mysql.jdbc.Driver
#log4j.appender.jdbc.URL=jdbc:mysql://127.0.0.1:3306/ssm2?characterEncoding=utf8&useSSL=true
#log4j.appender.jdbc.user=root
#log4j.appender.jdbc.password=123456
#log4j.appender.jdbc.sql=insert into log_icecoldmonitor(level,category,thread,time,location,note) values('%p','%c','%t','%d{yyyy-MM-dd HH:mm:ss:SSS}','%l','%m')

log4j_slf4j


1. 配置文件名称
      resources/log4j.properties

2. 导入jar包

    <!--slf4j 作为facade 层 封装了  log4j -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.21</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.21</version>
    </dependency>

3. 打印日志
     按照本示例log4j.properties 中的配置,会打印到程序根目录 的同级目录 名为 log_log4j_slf4j 的文件夹下

4. main 函数 中的静态函数
     //import org.slf4j.Logger;
     //import org.slf4j.LoggerFactory;            使用了如上两个引用
     private static org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(App.class);




主函数slf4j封装了Log4j 引用slf4j

package com.tz.leo.log;

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

/**
 * Hello world!
 *
 */
public class App 
{

    //import org.slf4j.Logger;
    //import org.slf4j.LoggerFactory;            使用了如上两个引用
    private static Logger logger = LoggerFactory.getLogger(App.class);

    public static void main( String[] args )
    {

        logger.info("********************************************");
        logger.info("*********** logged by slf4j   *********");
        logger.debug("调试debug信息");
        logger.info("普通Info信息");
        logger.warn("警告warn信息");
        logger.error("报错error信息");

        // logger.error("报错信息", new IllegalArgumentException("非法参数"));
        int i=0;
        while(i<10){
            logger.debug(" RollingFile 调试debug信息");
            logger.debug(" RollingFile 调试debug信息");
            logger.debug(" RollingFile 调试debug信息");
            logger.debug(" RollingFile 调试debug信息");
            logger.debug(" RollingFile 调试debug信息");
            i++;
        }

        logger.info("********************************************");
    }
}

log4j.properties 配置文件

log4j.debug=true   
log4j.rootLogger=DEBUG,Console,D,E

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

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = ./log_log4j_slf4j/logs.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = DEBUG
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ./log_log4j_slf4j/error.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

log4j2

使用说明


1. 配置文件名称
      resources/log4j2.xml

2. 导入jar包
        <!--log4j2的引用有两个 log4j-core  log4j-api -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.1</version>
        </dependency>

3. 打印日志
     按照本示例 log4j2.xml 中的配置,会打印到程序根目录 的同级目录 名为 log_log4j2 的文件夹下

4. main 函数 中的静态函数

    //import org.apache.logging.log4j.Logger;
    //import org.apache.logging.log4j.LogManager;
    private static Logger logger= LogManager.getLogger(App.class);






*************************************************************************************************




https://blog.csdn.net/zwj1030711290/article/details/81010320

log4j2优点
1. 解决死锁问题
2. 多线程,性能提升10倍

https://www.cnblogs.com/KylinBlog/p/7841217.html


1、配置文件类型

             log4j是通过一个.properties的文件作为主配置文件的,而现在的log4j 2则已经弃用了这种方式,采用的是.xml,.json或者.jsn这种方式来做,
             可能这也是技术发展的一个必然性,毕竟properties文件的可阅读性真的是有点差。

2、核心JAR包
            log4j只需要引入一个jar包即可,
            而log4j2则是需要2个核心

3、文件渲染
                log4j2就比较简单,以maven工程为例,我们只需要把log4j2.xml放到工程resource目录下就行了。
                大家记住一个细节点,是log4j2.xml,而不是log4j.xml,xml名字少个2都不行!!

4Log调用
            log4j2:
            import org.apache.logging.log4j.Logger;
            import org.apache.logging.log4j.LogManager;
            private static Logger logger = LogManager.getLogger(Test.class.getName());

主函数 引入的包不一样了

package com.tz.leo.log;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * Hello world!
 *
 */
public class App 
{
    //import org.apache.logging.log4j.Logger;
    //import org.apache.logging.log4j.LogManager;
    private static Logger logger= LogManager.getLogger(App.class);

    public static void main( String[] args )
    {
        logger.debug("Log4j2__调试debug信息");
        logger.info("Log4j2__普通Info信息");
        logger.warn("Log4j2__警告warn信息");
        logger.error("Log4j2__报错error信息");
        logger.fatal("Log4j2__严重错误fatal信息");

        // logger.error("报错信息", new IllegalArgumentException("非法参数"));
        int i=0;
        while(i<10){
            logger.debug("Log4j2__ RollingFile 调试debug信息");
            logger.debug("Log4j2__ RollingFile 调试debug信息");
            logger.debug("Log4j2__ RollingFile 调试debug信息");
            logger.debug("Log4j2__ RollingFile 调试debug信息");
            logger.debug("Log4j2__ RollingFile 调试debug信息");
            i++;
        }
    }
}

配置文件用xml形式

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
    <!--  先定义所有的appender -->
    <appenders>
        <!--   这个输出控制台的配置 -->
        <Console name="Console" target="SYSTEM_OUT">
            <!--    控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--    这个都知道是输出日志的格式 -->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>

        <!--   文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->
        <!--   append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->
        <File name="test" fileName="log_log4j2/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>

        <!--   添加过滤器ThresholdFilter,可以有选择的输出某个级别以上的类别 onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否则直接拒绝 -->
        <File name="ERROR" fileName="log_log4j2/error.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>

        <!--   这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
        <RollingFile name="RollingFile" fileName="log_log4j2/RollingFile.log" filePattern="log_log4j2/%date{yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <SizeBasedTriggeringPolicy size="2MB"/>
        </RollingFile>
    </appenders>

    <!--  然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
    <loggers>
        <!--   建立一个默认的root的logger -->
        <root level="trace">
            <appender-ref ref="Console"/>
            <appender-ref ref="ERROR"/>
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="test"/>
        </root>
    </loggers>
</configuration>

log4j2_slf4j

使用说明


1. 配置文件名称
      resources/log4j2.xml


2、 依赖
        日志的环境依赖总共有4部分,分别是 2.1  slf4j接口部分, 2.2 log4j2的日志框架实现部分(3)2.3 log4j2异步日志插件部分  2.4 slf4j与log4j2的桥接部分。
  part         包名 	            作用
  2.1      slf4j-api 	        目前的版本1.7就可。slf4j的接口包,我们对日志进行的所有操作都用的是这个包的API
  2.2      log4j-core 	        版本必须在2.1以上,是log4j2的核心包
  2.2      log4j-api 	        版本与核心包一致,log4j2的接口包,用来直接调用log4j2框架的,必须导入,不然无法与slf4j对接
  2.2      log4j-web 	        版本与核心包一致,用于web项目的log4j2,阻止web项目出现警告
  2.3      com.lmax.disruptor 	版本随意,开启log4j2的异步日志记录的功能
  2.4      log4j-slf4j-impl 	版本与核心包一致,用于slf4j与log4j对接,即用slf4j的接口实现操作日志

<properties>
        <log4j2.version>2.11.2</log4j2.version>
        <slf4j.version>1.7.28</slf4j.version>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-web -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.lmax/disruptor -->
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>3.4.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
    </dependencies>
————————————————
版权声明:本文为优快云博主「MemoForward」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34294121/java/article/details/100111995



3. 打印日志
     按照本示例 log4j2.xml 中的配置,会打印到程序根目录 的同级目录 名为 log_log4j2 的文件夹下

4. main 函数 中的静态函数
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    private static Logger logger= LogManager.getLogger(App.class);






*************************************************************************************************




https://blog.csdn.net/zwj1030711290/article/details/81010320

log4j2优点
1. 解决死锁问题
2. 多线程,性能提升10倍

https://www.cnblogs.com/KylinBlog/p/7841217.html


1、配置文件类型

             log4j是通过一个.properties的文件作为主配置文件的,而现在的log4j 2则已经弃用了这种方式,采用的是.xml,.json或者.jsn这种方式来做,
             可能这也是技术发展的一个必然性,毕竟properties文件的可阅读性真的是有点差。

2、核心JAR包
            log4j只需要引入一个jar包即可,
            而log4j2则是需要2个核心

3、文件渲染
                log4j2就比较简单,以maven工程为例,我们只需要把log4j2.xml放到工程resource目录下就行了。
                大家记住一个细节点,是log4j2.xml,而不是log4j.xml,xml名字少个2都不行!!

4Log调用
            log4j2:
            import org.apache.logging.log4j.Logger;
            import org.apache.logging.log4j.LogManager;
            private static Logger logger = LogManager.getLogger(Test.class.getName());

主方法

package com.tz.leo.log;

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

/**
 * Hello world!
 */
public class App 
{
    // import org.slf4j.Logger;
    // import org.slf4j.LoggerFactory;
    // private static final Logger logger = LoggerFactory.getLogger("AsyncLogger");
    private static final Logger logger = LoggerFactory.getLogger(App.class);

    public static void main( String[] args )
    {

        logger.info("********************************************");
        logger.info("***********   logged by  slf4j  log4j2   *********");
        logger.debug("调试debug信息");
        logger.info("普通Info信息");
        logger.warn("警告warn信息");
        logger.error("报错error信息");

        // logger.error("报错信息", new IllegalArgumentException("非法参数"));
        int i=0;
        while(i<10){
            logger.debug(" RollingFile 调试debug信息");
            logger.debug(" RollingFile 调试debug信息");
            logger.debug(" RollingFile 调试debug信息");
            logger.debug(" RollingFile 调试debug信息");
            logger.debug(" RollingFile 调试debug信息");
            i++;
        }

        logger.info("********************************************");
    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="WARN" monitorInterval="30">
    <!--先定义所有的appender-->
    <appenders>
        <!--这个输出控制台的配置-->
        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式-->
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        </console>
        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
        <!--  fileName="D://LOGS//log_log4j233//error.log"  -->
        <File name="log" fileName="log_log4j2_slf4j/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>
        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileInfo" fileName="log_log4j2_slf4j/info.log"
                     filePattern="log_log4j2_slf4j/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
        <RollingFile name="RollingFileWarn" fileName="log_log4j2_slf4j/warn.log"
                     filePattern="log_log4j2_slf4j/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
        <RollingFile name="RollingFileError" fileName="log_log4j2_slf4j/error.log"
                     filePattern="log_log4j2_slf4j/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <logger name="org.springframework" level="INFO"></logger>
        <logger name="org.mybatis" level="INFO"></logger>
        <root level="all">
            <appender-ref ref="Console"/>
            <appender-ref ref="log"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/>
        </root>
    </loggers>
</configuration>

logback (选中它)

package com.tz.leo.log;

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

/**
 * Hello world!
 *
 */
public class App 
{
    private static Logger logger = LoggerFactory.getLogger(App.class);

    public static void main( String[] args )
    {

        logger.debug("Logback__调试debug信息");
        logger.info("Logback__普通Info信息");
        logger.warn("Logback__警告warn信息");
        logger.error("Logback__报错error信息");
    }
}

<!--这个依赖直接包含了 logback-core 以及 slf4j-api的依赖-->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
      <!--  <scope>test</scope>-->
    </dependency>

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="1 seconds">

    <contextName>logback</contextName>
    <!--定义参数,后面可以通过${app.name}使用-->
    <property name="app.name" value="logback_test"/>
    <!--logback方式打印日志的目录地址-->
    <property name="scheduler.manager.server.home" value="log_logback"></property>
    <!--ConsoleAppender 用于在屏幕上输出日志-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--定义了一个过滤器,在LEVEL之下的日志输出不会被打印出来-->
        <!--这里定义了DEBUG,也就是控制台不会输出比ERROR级别小的日志-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <!-- encoder 默认配置为PatternLayoutEncoder -->
        <!--定义控制台输出格式-->
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--定义日志输出的路径-->
        <!--这里的scheduler.manager.server.home 没有在上面的配置中设定,所以会使用java启动时配置的值-->
        <!--比如通过 java -Dscheduler.manager.server.home=/path/to XXXX 配置该属性-->
        <file>${scheduler.manager.server.home}/logs/${app.name}.log</file>
        <!--定义日志滚动的策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--定义文件滚动时的文件名的格式-->
            <fileNamePattern>${scheduler.manager.server.home}/logs/${app.name}.%d{yyyy-MM-dd.HH}.log.gz
            </fileNamePattern>
            <!--60天的时间周期,日志量最大20GB-->
            <maxHistory>60</maxHistory>
            <!-- 该属性在 1.1.6版本后 才开始支持-->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <!--每个日志文件最大100MB-->
            <maxFileSize>100MB</maxFileSize>
        </triggeringPolicy>
        <!--定义输出格式-->
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
        </encoder>
    </appender>

    <!--root是默认的logger 这里设定输出级别是debug-->
    <root level="trace">
        <!--定义了两个appender,日志会通过往这两个appender里面写-->
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </root>

    <!--对于类路径以 com.example.logback 开头的Logger,输出级别设置为warn,并且只输出到控制台-->
    <!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
    <logger name="com.example.logback" level="warn"/>

    <!--通过 LoggerFactory.getLogger("mytest") 可以获取到这个logger-->
    <!--由于这个logger自动继承了root的appender,root中已经有stdout的appender了,自己这边又引入了stdout的appender-->
    <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
    <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
    <logger name="mytest" level="info" additivity="false">
        <appender-ref ref="stdout"/>
    </logger>

    <!--由于设置了 additivity="false" ,所以输出时不会使用rootLogger的appender-->
    <!--但是这个logger本身又没有配置appender,所以使用这个logger输出日志的话就不会输出到任何地方-->
    <logger name="mytest2" level="info" additivity="false"/>
</configuration>

logback.xml 三种配置示例


<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="6 seconds">

    <contextName>logback</contextName>
    <!--定义参数,后面可以通过${app.name}使用-->
    <property name="app.name" value="logback_xgjc"/>
    <!--logback方式打印日志的目录地址-->
    <property name="scheduler.manager.server.home" value="log_logback"></property>
    <!--ConsoleAppender 用于在屏幕上输出日志-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--定义了一个过滤器,在LEVEL之下的日志输出不会被打印出来-->
        <!--这里定义了DEBUG,也就是控制台不会输出比ERROR级别小的日志 即DEBUG,INFO,WARN,ERROR,FATAL;  -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>即DEBUG</level>
        </filter>
        <!-- encoder 默认配置为PatternLayoutEncoder -->
        <!--定义控制台输出格式-->
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
        </encoder>
    </appender>
    

  <!--1)第一种配置如下时,将会使日志文件往后累加,而不是每日只生成当日的日志文件-->
    <appender name="log1common" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${scheduler.manager.server.home}/log1/access.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${scheduler.manager.server.home}/log1/access.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!-- keep 1 days worth of history -->
            <MaxHistory>1</MaxHistory>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss} -%msg%n</Pattern>
        </layout>
    </appender>

    <!--2)第二种配置如下时,按天生成日志文件,每天的日志文件里只保存当天的日志信息-->
    <appender name="log2everyDayfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <Prudent>true</Prudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${scheduler.manager.server.home}/log2/access.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!-- keep 60 days worth of history -->
            <MaxHistory>60</MaxHistory>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss} -%msg%n</Pattern>
        </layout>
    </appender>

    <!--3)第三种配置如下时,按天生成文件夹,每个文件夹里放当天的日志文件-->
    <appender name="log3everyDayDir" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <Prudent>true</Prudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
                ${scheduler.manager.server.home}/log3/%d{yyyy-MM-dd}/access.%d{yyyy-MM-dd}.log
            </FileNamePattern>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss} -%msg%n</Pattern>
        </layout>
    </appender>

    <!-- 设置日志级别 -->
    <!--root是默认的logger 这里设定输出级别是debug-->
    <!--输出优先级,即 DEBUG,INFO,WARN,ERROR,FATAL;-->
    <root level="INFO">
        <!--定义了两个appender,日志会通过往这两个appender里面写-->
        <appender-ref ref="stdout"/>
        <!--<appender-ref ref="file"/>-->
        <appender-ref ref="log2everyDayfile"/>
    </root>


    <!--这个一定要 -->
    <logger name="com.tiza.xcmg.syncVehDataFromCrm.mapper" level="DEBUG" ></logger>

</configuration>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值