Java中的日志框架

别说谁变了你拦得住时间么 提交于 2020-01-26 16:16:39

需求

使用日志框架有三点需求:

1、期望日志能保存在文件中,方便时候排错。

2、开发环境的日志记录会更多方便调试。

3、生产环境需要记录重要的信息。

 

Log4j

可用于普通maven项目,也可以用于springboot项目。

Log4j提供了简单的API调用,强大的日志格式定义以及灵活的扩展性。

可以自定义Appender来满足日志输出的需求。

 

日志级别

从低到高

DEBUG INFO WARN ERROR FATAL

 

pom依赖

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.8.2</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>2.8.2</version>
</dependency>

 

目录结构

- src
 - main
  - java
  - resources
     log4j.properties

 

配置文件

log4j.properties

log4j.rootLogger=debug, stdout, A, D, E
 
### Output to the console ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS} %t [%p] %c{1} (%F:%L) %m%n
 
### Output to the log file ###
log4j.appender.A=org.apache.log4j.RollingFileAppender
log4j.appender.A.File=D:/logs/firestorm.log
log4j.appender.A.MaxFileSize=1000KB
log4j.appender.A.MaxBackupIndex=1
log4j.appender.A.layout=org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS} %t [%p] %c{1} (%F:%L) %m%n
 
### 输出DEBUG 级别以上的日志 ###
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=D://logs/debug/debug.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.SSS} %t [%p] %c{1} (%F:%L) %m%n
 
### 输出ERROR 级别以上的日志 ###
log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File=D://logs/error/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.SSS} %t [%p] %c{1} (%F:%L) %m%n

 

Appender

指定日志输出目的地,可以是控制台也可以是文件。

  • 输出到控制台的org.apache.log4j.ConsoleAppender

  • 输出到文件的org.apache.log4j.DailyRollingFileAppender

 

ConversionPattern

指定日志的输出格式

%p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
%r:输出自应用程序启动到输出该log信息耗费的毫秒数。
%t:输出产生该日志事件的线程名。
%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。
%c:输出日志信息所属的类目,通常就是所在类的全名。
%M:输出产生日志信息的方法名。
%F:输出日志消息产生时所在的文件名称。
%L::输出代码中的行号。
%m::输出代码中指定的具体日志信息。
%n:输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"。
%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%:输出一个"%"字符。
另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:
%20c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
%-20c:"-"号表示左对齐。
%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

 

具体使用

import fabric.edu.sdk.ca.CaManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
/**
 * @author wzm
 * @version 1.0.0
 * @date 2020/1/24 15:25
 **/
public class MyTest {
 
    private static final Log log = LogFactory.getLog(CaManager.class);
 
    public static void main(String[] args) {
        log.info("hello");
        log.debug("hello");
        log.error("hello");
        log.warn("hello");
    }
}

 

打印

2020/01/26 15:01:43.005 main [INFO] CaManager (MyTest.java:17) hello
2020/01/26 15:01:43.006 main [DEBUG] CaManager (MyTest.java:18) hello
2020/01/26 15:01:43.006 main [ERROR] CaManager (MyTest.java:19) hello
2020/01/26 15:01:43.007 main [WARN] CaManager (MyTest.java:20) hello

 

logback

xxx

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!