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都不行!!
4、Log调用
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都不行!!
4、Log调用
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>



被折叠的 条评论
为什么被折叠?



