Log4j总结详细讲解

Log4j是Apache的一个日志项目,说得通俗易懂点Log4j就是做日志的,简单示范一下怎么使用的。

简答的示范:

记录登录成功了

logger.info("登录成功");

出错了

logger.warn('代码报错了balabalabala')

使用的时候就是这么简单

那我们一起走进Log4j这门技术吧

首先呢,log4j需要一个配置文件,下面以我的为示范

log4j.properties文件:

指定根日志器记录debug级别及以上的日志,并预定义了控制台日志器、天日志器(隔一定时间一个日志文件),也就是一个在控制台输出日志一个,隔一段时间存一个日志文件把日志放在里面

 

log4j.rootLogger=DEBUG, Console ,DailyRollingFile 

 

下面这个是控制台日志记录器的详细配置

#Console  (控制台)
log4j.appender.Console=org.apache.log4j.ConsoleAppender  #通俗理解:我们定义的日志器console=阿帕奇里的控制台日志器

log4j.appender.Console.layout=org.apache.log4j.PatternLayout #通俗理解:我们的日志器的布局=阿帕奇的格式化布局

log4j.appender.Console.layout.ConversionPattern=[ %p ] %d{yyyy-MM-dd HH:mm:ss}[ %l: used %r ms] %n %m%n #通俗理解:我们的日志器的布局的格式设置为=巴拉巴拉(参考下面的资料和这个示范产生的日志去理解,是利用占位符的思想做的) 比如按照这个配置调用logger.info("我是日志,记录了XXX") 那么会输出的是

[ INFO ] 2020-01-17 19:26:57[ cn.freeprogramming.fpa.controler.MemberController.login(MemberController.java:160): used 86495337 ms] 我是日志,记录了XXX

# LOg4j里的占位符资料
#%m:输出代码中指定的消息
#%p:输出优先级,即 DEBUG,INFO,WARN,ERROR,FATAL
#%r:输出自应用启动到输出该 log 信息耗费的毫秒数
#%c:输出所属的类目,通常就是所在类的全名
#%t:输出产生该日志事件的线程名
#%n:输出一个回车换行符,Windows 平台为 /r/n,Unix 平台为 /n
#%d:输出日志时间点的日期或时间,默认格式为 ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22:10:28,921
#%l:输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )
#DailyRollingFile(每天一个日志文件)这个是我想定义的每天一个日志文件的日志器   
log4j.appender.DailyRollingFile = org.apache.log4j.DailyRollingFileAppender  #同理不讲
log4j.appender.DailyRollingFile.File = C://FPALog/FPADailyRollingFile.log  #设置日志文件的位置
log4j.appender.DailyRollingFile.layout = org.apache.log4j.PatternLayout  #同理

log4j.appender.DailyRollingFile.layout.ConversionPattern =[ %p ] %d{yyyy-MM-dd HH:mm:ss}[ %l: used %r ms] %n %m%n #同理

log4j.appender.DailyRollingFile.DatePattern=yyyy-MM-dd'.log' #这个指定了生成历史日志的文件名格式=上面的文件在后面加yyyy-mm-dd'.log',

#比如上面的文件是FPADailyRollingFile.log,那么比如今天是2020年1月16日,到了明天,那么历史日志就会存在FPADailyRollingFile.log2020-01-16.log,可以参照我下面的截图理解

log4j.appender.DailyRollingFile.encoding=UTF-8 #不解释
log4j.appender.DailyRollingFile.Threshold=info #info及以上的日志才记录

 

 

 

上面是我的案例,理解了之后再去看Log4j的资料就会容易理解很多,一开始我搞了好久都没理解,最后通过试验来理解了log4j

推荐一个博客Log4j-简书

----------------------------------------------------------------------------------------------------------------

常用的附加器实现类

  • org.apache.log4j.ConsoleAppender:日志输出到控制台
  • org.apache.log4j.FileAppender:日志输出到文件
  • org.apache.log4j.RollingFileAppender:当日志文件大小到达指定尺寸的时候将产生一个新的日志文件
  • org.apache.log4j.DailyRollingFileAppender:每天产生一个日志文件
我们案例里用到了的是第一个和第四个,第一个不多解释,第四个,虽然说是每天产生一个日志文件,其实它这个可以理解为定时产生日志,
用我的理解来说

ConsoleAppender:控制台输出日志

FileAppender:一直输出到一个文件(一直追加)

RollingFileAppender:按照设置(文件最大值,文件最大数量)去生成日志,一旦文件达到一定大小就创建一个新的日志文件去存,最多有多少个日志文件,一旦超过就把前面的覆盖掉

DailyRollingFileAppender:定时产生日志文件,把历史日志按照格式产生

------------------------------------------------------------------------------------------------------------------------------

常用的布局

org.apache.log4j.HTMLLayout(以HTML表格形式布局),  
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),  
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),  
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

--------------------------------------------------------------------------------------------------------------------------------

到此你已经理解了Log4j就是有四种常用的日志器,然后我们可以自己设置日志的布局、输出格式、怎么输出。
那么我们可以开始讲怎么使用了(使用SpringBoot2.0做web项目为例)

第一步:在resources目录下创建一个log4j.properties

第二步:按照你的需求编写好这个配置文件

第三步:在maven里导入或者自己下jar包导入

<!--        log4j-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

第四步:代码里使用

导包

import org.apache.log4j.Logger;//导包

创建logger代码

Logger logger=Logger.getLogger(Test.class)//调用静态方法getLogger(),传入一个类

如果你使用Spring进行管理

那么就创建一个配置文件,来对这个Bean做注册

import org.apache.log4j.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Log4jConfig {
    @Bean
    public Logger logger()
    {
        return Logger.getLogger(Test.class);
    }
}

将这个Bean注册好之后那么你使用的时候就是如下这样(依赖注入),在controller成员变量里:

@Autowired
private Logger logger;

然后就可以痛快的使用logger进行log了

 

 

posted @ 2020-01-16 00:23  HumorChen99  阅读(13)  评论(0编辑  收藏  举报  来源