- 简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它支持各种各样的日志框架。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志框架。
- 在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。
- Log For Java,Apache的一个开源项目,可以灵活地记录日志信息。可以在运行时弃用日志记录而无需修改应用程序二进制文件,即可以通过编辑Log4j的配置文件控制日志记录行为,灵活配置日志的记录格式、记录级别、输出格式,无需触及应用程序二进制文件。也可以不使用配置文件,通过在代码中配置Log4j环境启用Log4j,但不如配置文件灵活。
- log4j由三个重要的组件构成:优先级、输出目的地、输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显 示内容。
- log4j包的设计使得日志语句可以保留在已发布的代码中,不会产生很高的性能成本。日志记录为开发人员提供了应用程序故障的详细上下文。另一方面,测试提供了应用程序的质量保证和信心,记录和测试是互补的,不能混淆二者。
- log4j的一个显着特征是记录器中的继承概念。使用记录器层次结构,可以很容易地控制以任意精细的粒度输出哪些日志语句,有助于减少记录的输出量和成本。
- 日志输出的目标可以是文件,OutputStream,java.io.Writer,远程log4j服务器,远程Unix Syslog守护程序或许多其他输出目标。
感觉理论有点枯燥,所以参考了几个博客,研究了一下怎么编程使用,下面是两个例子
一、基础Java项目使用log4j
1、创建Java项目
2、下载log4j-1.2.17.zip,解压找到jar文件,将jar文件放在Java项目的src文件夹下
3、导入jar包
4、配置log4j.properties文件:src上右键,new,Resource Bundle,输入文件名,OK
在log4j.properties文件中输入配置信息(网上有很多详解log4j语法的博客):
5、设置日志内容:在src中新建测试类,编程,运行,代码和控制台如下图
输出的日志文件:
二、Maven项目使用log4j
- Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
- Eclipse和Intellij idea都有Maven的插件,支持使用Maven构建项目。如果团队使用Maven构建项目,那么不论是否有IDE、或者不论IDE是什么,都不会出现因为换IDE导致的项目结构变化的问题。
1、新建Maven项目
2、点击右下角的Enable Auto-Import,使项目能够自动导入相应的包
3、配置pom.xml文件
<dependencies>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
</dependencies>
4、配置log4j.properties文件:在resources文件夹下新建log4j.properties文件(配置信息同上,改下输出路径)
5、设置日志内容:建立测试类
6、编程,运行,结果如下
代码:
##配置文件log4j.properties
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E://Java//LogTest2//logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://Java//LogTest2//logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
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
### 输出ERROR 级别以上的日志到=E://Java//LogTest2//logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://Java//LogTest2//logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
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
##测试类
import org.apache.log4j.Logger;
public class Test {
private static Logger logger = Logger.getLogger(Test.class);
public static void main(String[] args) {
// 记录debug级别的信息
logger.debug("This is debug message.");
// 记录info级别的信息
logger.info("This is info message.");
// 记录error级别的信息
logger.error("This is error message.");
}
}
参考:
- https://blog.csdn.net/huwei2003/article/details/76071451
- https://blog.csdn.net/muyi_amen/article/details/79219181
- https://www.cnblogs.com/ywlaker/p/6124067.html
- https://www.cnblogs.com/haoqipeng/p/java-log4j-slf4j-use.html
- http://www.codeceo.com/article/log4j-usage.html
- http://logging.apache.org/log4j/1.2/
- https://segmentfault.com/a/1190000016033592