概览

代码示例:
<!-- slf4j门面 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
</dependency>
<!-- 实现1:这里先用simple简单日志框架 -->
<!--<dependency>-->
<!-- <groupId>org.slf4j</groupId>-->
<!-- <artifactId>slf4j-simple</artifactId>-->
<!-- <version>1.7.21</version>-->
<!--</dependency>-->
<!-- 实现2:使用logback(使用2的时候,需要将1注释掉) -->
<!--<dependency>-->
<!-- <groupId>ch.qos.logback</groupId>-->
<!-- <artifactId>logback-classic</artifactId>-->
<!-- <version>1.2.3</version>-->
<!--</dependency>-->
<!-- 实现3:日志开关:注入表示不开启日志,1和2需要注释掉 -->
<!--<dependency>-->
<!-- <groupId>org.slf4j</groupId>-->
<!-- <artifactId>slf4j-nop</artifactId>-->
<!-- <version>1.7.25</version>-->
<!--</dependency>-->
<!-- 实现4:集成log4j, 因为log4j出现较早,需要有适配器适配 -->
<!-- 注意:log4j需要增加配置文件集成,否则找不到appenders -->
<!--<dependency>-->
<!-- <groupId>org.slf4j</groupId>-->
<!-- <artifactId>slf4j-log4j12</artifactId>-->
<!-- <version>1.7.30</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!-- <groupId>log4j</groupId>-->
<!-- <artifactId>log4j</artifactId>-->
<!-- <version>1.2.16</version>-->
<!--</dependency>-->
<!-- 实现5:JDK自带的JUL,需要增加适配器 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.5.6</version>
</dependency>
# maven:
<!-- log4j的依赖 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
# log4j.xml
# 指定RootLogger顶级父元素默认配置信息
# 指定日志级别为trace、输出位置appender为不同的Appender
log4j.rootLogger = trace,console,file
#log4j.rootLogger = trace,rollingFile
#log4j.rootLogger = trace,dailyFile
# 自定义logger对象输出,表示com.test对象的及其子类的log按照error级别输出
log4j.logger.com.test = error
# ***************************** 控制台配置 *********************************
# 指定控制台输出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
# 指定消息格式layout:这里以最常用的PatternLayout为例子
log4j.appender.console.layout = org.apache.log4j.PatternLayout
# 测试输出的格式转换样式
log4j.appender.console.layout.conversionPattern = [%r] [%t] %p %c %x - %m%n
# ***************************** 日志文件配置 *********************************
# 提醒一下:如果需要查看File需要哪些配置的话,可以进入到FileAppender类中查看详细属性
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern = [%r] [%t] %p %c %x - %m%n
log4j.appender.file.file = ./log4j-first.log
log4j.appender.file.encoding = UTF-8
# ***************************** 日志文件压缩配置-RollingFileAppender *********************************
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.conversionPattern = [%r] [%t] %p %c %x - %m%n
log4j.appender.rollingFile.file = ./log4j-first-roll.log
log4j.appender.rollingFile.encoding = UTF-8
log4j.appender.rollingFile.maxFileSize = 100KB
log4j.appender.rollingFile.maxBackupIndex = 3
# ***************************** 日志文件压缩配置-DailyRollingFileAppender *********************************
log4j.appender.dailyFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.conversionPattern = [%r] [%t] %p %c %x - %m%n
log4j.appender.dailyFile.file = ./log4j-first-daily.log
log4j.appender.dailyFile.encoding = UTF-8
log4j.appender.dailyFile.datePattern = '.'yyyy-MM-dd-HH-mm-ss
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
public class Main {
public static void main(String[] args) {
Logger logger = Logger.getLogger("Main.class");
logger.info("Hello World");
logger.log(Level.INFO, "Hello World by {0}", "China");
// 一些配置
// 关闭默认配置
logger.setUseParentHandlers(false);
// 自定义日志输出
ConsoleHandler consoleHandler = new ConsoleHandler();
// 创建简单格式转换对象
SimpleFormatter simpleFormatter = new SimpleFormatter();
// 关联
consoleHandler.setFormatter(simpleFormatter);
// 添加handler(责任链模式)
logger.addHandler(consoleHandler);
// 设置级别
logger.setLevel(Level.ALL);
consoleHandler.setLevel(Level.ALL);
logger.info("Hello World New Console");
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!--
scan:为true时,配置文件改变时,自动加载
scanPeriod:修改的时间间隔,实时查看logback的运行状态
debug:为true时打印logback内部的运行信息
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 首先:配置集中属性 -->
<!-- 后续使用时,可参照linux方式,直接${xx}方式引用集中属性 -->
<property name="pattern" value="[%thread] [%-5level] %d{yyyy-MM-dd-HH-mm-ss} %c %M %L %m %n"></property>
<property name="log_dir" value="./logback"></property>
<!-- 定义appender - 控制台 -->
<!-- 备注:这里为什么可以用target字段?是因为ConsoleAppender类里定义了target字段,故这里可以使用 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 测试:将控制台输出全部置为红色error级别 -->
<target>System.err</target>
<!-- 日志消息格式定义 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 定义appender - 日志文件 -->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<!-- 日志文件的保存路径 -->
<file>${log_dir}/first.log</file>
<!-- 日志消息格式定义 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 定义appender - HTML日志文件 -->
<appender name="htmlfile" class="ch.qos.logback.core.FileAppender">
<!-- 日志文件的保存路径 -->
<file>${log_dir}/first.html</file>
<!-- 日志消息格式定义 -->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>${pattern}</pattern>
</layout>
</encoder>
</appender>
<!-- 定义appender - 日志拆分和压缩 -->
<appender name="rollfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件的保存路径 -->
<file>${log_dir}/rolling.log</file>
<!-- 日志消息格式定义 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
<!-- 指定拆分属性 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 按照时间、压缩格式拆分 -->
<!-- 注意:这里的%i一定不能少,否则无法拆分压缩 -->
<fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern>
<!-- 按照文件大小拆分 -->
<maxFileSize>10KB</maxFileSize>
</rollingPolicy>
<!-- 自定义过滤器,示例:级别过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 定义appender - 异步appender,提升性能,异步写入日志 -->
<appender name="asyncfile" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="rollfile"/>
</appender>
<!-- 日志记录器有父子关系,这里设置root的记录器引用 -->
<!-- ALL:表示打开所有日志级别 -->
<root level="INFO">
<!--<appender-ref ref="console"/>-->
<!--<appender-ref ref="file"/>-->
<!--<appender-ref ref="asyncfile"/>-->
<appender-ref ref="rollfile"/>
<!--<appender-ref ref="htmlfile"/>-->
</root>
<!-- 自定义logger实现 -->
<!--<logger name="Main" level="warn" additivity="false">-->
<!-- <appender-ref ref="console"/>-->
<!--</logger>-->
</configuration>
<!-- slf4j门面 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
</dependency>
<!-- 增加适配器进行绑定 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.1</version>
</dependency>
<!-- 这个是并发编程的主要依赖,这里用来做异步日志线程 -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.4</version>
</dependency>