• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

日志问题JDK Logging、Commons Logging和Log4j、Slf4j和Logbacck的和使用

武飞扬头像
风吹海洋浪
帮助1

是什么

产生原因:

因为System.out.println()使用起来太麻烦,需要删除和添加
什么是日志?日志就是Logging,它的目的是为了取代System.out.println()。

原文链接:https://www.liaoxuefeng.com/wiki/1252599548343744/1264738568571776

简介

几个日志框架简单分为两类:

日志门面 commons-logging,slf4j
日志实现 log4j,jdk-logging,logback,log4j2
符合Java的面向对象设计理念,将接口与实现相分离。
JDK Logging:Java标准库内置了日志包java.util.logging
Commons Logging:Commons Logging是一个第三方日志库,它是由Apache创建的日志模块。默认情况下,Commons Loggin自动搜索并使用Log4j(Log4j是另一个流行的日志系统),如果没有找到Log4j,再使用JDK Logging。充当日志API。
Log4j:组件化设计的日志系统,日志框架,充当负责实现日志底层
Slf4j:类似于Commons Logging,也是一个日志接口,仅仅是一个为 Java 程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如 JDBC 一样,只是一种规则而已。所以单独的 slf4j 是不能工作的,必须搭配其他具体的日志实现方案。只服务于各种各样的日志系统。
slf4j相比于Commons Logging不需要拼字符串了。
Logback:因为对Commons Logging的接口不满意,有人就搞了SLF4J。因为对Log4j的性能不满意,有人就搞了Logback。

如何使用

JDK logging

https://blog.csdn.net/u011794238/article/details/50717677
https://www.cnblogs.com/whx7762/p/8136779.html

输出日志到文件中

        根据类名创建logger对象
        Logger logger = Logger.getLogger("MonitorTest");
        指定文件路径,后面可加参数(“./log”,true)意思是是否追加数据,不加true就是覆盖文件
        FileHandler fileHandler = new FileHandler("./log");
        logger.addHandler(fileHandler);
        取消父类中的输出信息到控制台
        logger.setUseParentHandlers(false);
        设置一下输出样式,默认是输出xml格式
        fileHandler.setFormatter(new SimpleFormatter());
        打印信息
        logger.info("xxx");

log4j slf4j

1.导入依赖

<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.7</version>
  </dependency>
  <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.6.1</version>
      </dependency>
   <dependency>  
      <groupId>org.slf4j</groupId>  
      <artifactId>slf4j-log4j12</artifactId>  
      <version>1.7.2</version>  
   </dependency>
链接:https://my.oschina.net/ITBoy/blog/23654?hmsr=kaifa_aladdin

2.配置文件

Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值). 项目类路径下添加log4j.properties配置文件。


```bash
#############
# 输出到控制台
#############

# log4j.rootLogger日志输出类别和级别:只输出不低于该级别的日志信息DEBUG < INFO < WARN < ERROR < FATAL
# WARN:日志级别     CONSOLE:输出位置自己定义的一个名字       logfile:输出位置自己定义的一个名字
log4j.rootLogger=WARN,CONSOLE,logfile
# 配置CONSOLE输出到控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
# 配置CONSOLE设置为自定义布局模式
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
# 配置CONSOLE日志的输出格式  [frame] 2019-08-22 22:52:12,000  %r耗费毫秒数 %p日志的优先级 %t线程名 %C所属类名通常为全类名 %L代码中的行号 %x线程相关联的NDC %m日志 %n换行
log4j.appender.CONSOLE.layout.ConversionPattern=[frame] %d{yyyy-MM-dd HH:mm:ss,SSS} - %-4r %-5p [%t] %C:%L %x - %m%n

################
# 输出到日志文件中
################

# 配置logfile输出到文件中 文件大小到达指定尺寸的时候产生新的日志文件
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
# 保存编码格式
log4j.appender.logfile.Encoding=UTF-8
# 输出文件位置此为项目根目录下的logs文件夹中
log4j.appender.logfile.File=logs/root.log
# 后缀可以是KB,MB,GB达到该大小后创建新的日志文件
log4j.appender.logfile.MaxFileSize=10MB
# 设置滚定文件的最大值3 指可以产生root.log.1、root.log.2、root.log.3和root.log四个日志文件
log4j.appender.logfile.MaxBackupIndex=3  
# 配置logfile为自定义布局模式
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n
学新通

分析上面的配置文件的信息:

log4j.rootCategory = [ level ] , appenderName, appenderName
level 是日志记录的优先级,Log4j只建议使用4个级别,优先级从高到低分别是error,warn,info和debug。
stdout:是控制台=
log4j.appender.stdout = org.apache.log4j.ConsoleAppender 
一般用缩写E、W、D,或者自定义名字
A:off 最高等级,用于关闭所有日志记录。
B:fatal 指出每个严重的错误事件将会导致应用程序的退出。
C:error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
D:warm 表明会出现潜在的错误情形。
E:info 一般和在粗粒度级别上,强调应用程序的运行全程。
F:debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
G:all 最低等级,用于打开所有日志记录。
appenderName就是指定日志信息输出到哪个地方.您可以同时指定多个 
输出目的地. Log4j有一个规则:只输出级别不低于设定级别的日志信息
配置日志信息输出目的地Appender
log4j.appender.appenderName = *fully.qualified.name.of.appender.class*
允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,常用的:
*
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
*
Appender的一些选项

链接:https://blog.csdn.net/death10001/article/details/8486355?utm_medium=distribute.pc_relevant.none-task-blog-2default百度js_百度landingword~default-0.pc_relevant_paycolumn_v3&spm=1001.2101.3001.4242.1&utm_relevant_index=3
链接:https://www.cnblogs.com/zhangguangxiang/p/12007924.html

log4j.appender.appenderName.option1 = value1  
(1)ConsoleAppender选项:
Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
Target=System.err:默认值是System.out。

(2)FileAppender选项:
Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。

(3)DailyRollingFileAppender选项:
Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
File=D:/logs/logging.log4j:指定当前消息输出到logging.log4j文件中。
DatePattern='.'yyyy-MM:每月滚动一次日志文件,即每月产生一个新的日志文件。当前月的日志文件名为logging.log4j,前一个月的日志文件名为logging.log4j.yyyy-MM。
另外,也可以指定按周、天、时、分等来滚动日志文件,对应的格式如下:
1)'.'yyyy-MM:每月
2)'.'yyyy-ww:每周 
3)'.'yyyy-MM-dd:每天
4)'.'yyyy-MM-dd-a:每天两次
5)'.'yyyy-MM-dd-HH:每小时
6)'.'yyyy-MM-dd-HH-mm:每分钟

(4)RollingFileAppender选项:
Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。
MaxFileSize=100KB:后缀可以是KB, MB 或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数,例如,设为2则可以产生logging.log4j.1,logging.log4j.2两个滚动文件和一个logging.log4j文件。

以及每个都常用样式的选项:layouts
学新通

3.使用方式

Logger对象的获得或创建常用方式:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private final static Logger logger = LoggerFactory.getLogger(Test.class);

读取配置文件:PropertyConfigurator.configure(“log4j.properties”) 默认读取的是项目根目录的路径。此时的log4j.properties要放在项目目录下。

PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgihbea
系列文章
更多 icon
同类精品
更多 icon
继续加载