前言

各组件之间的关系:

slf4j是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它本身只提供了日志Facade API和一个简单的日志类实现,一般常配合Log4j,LogBack,java.util.logging使用。

Slf4j作为应用层的Log接入时,程序可以根据实际应用场景动态调整底层的日志实现框架(Log4j/LogBack/JdkLog...);

LogBack和Log4j都是开源日记工具库,LogBack是Log4j的改良版本,比Log4j拥有更多的特性,同时也带来很大性能提升。

LogBack官方建议配合Slf4j使用,这样可以灵活地替换底层日志框架。

一、Slf4j

1、Slf4j的概念

slf4j只是一个日志标准,并不是日志系统的具体实现。理解这句话非常重要,slf4j只做两件事情:

提供日志接口

提供获取具体日志对象的方法

slf4j的直接/间接实现有slf4j-simple、logback、slf4j-log4j12

2、我们为什么要使用slf4j

2.1、 面向接口编程/外观模式的所有好处

2.2、 统一所有模块的日志

3、Slf4j的实现原理

3.1 提供Slf4j功能的组件实现了Logger接口

3.2 提供Slf4j功能的组件里面必须要实现一个文件:org/slf4j/impl/StaticLoggerBinder.class

Slf4j通过 ClassLoader.getSystemResources(STATIC_LOGGER_BINDER_PATH); 这句代码获取到这个类的对象,进而获得Logger

//STATIC_LOGGER_BINDER_PATH = "org/slf4j/impl/StaticLoggerBinder.class"

如果有多个同名,会随机选一个

4、Slf4j的用法

pom:

org.slf4j

slf4j-api

1.7.25

注意:下面的这几个实现,只需要其中一个。

ch.qos.logback

logback-classic

1.2.3

org.slf4j

slf4j-simple

1.7.25

log4j

log4j

1.2.17

org.slf4j

slf4j-log4j12

1.7.21

注意,如果需要用@Slf4j这种注解的方式使用日志,需要加lombak的引用,并在ide中添加lombak插件

org.projectlombok

lombok

1.16.18

@Slf4j

public class AlarmUtil

{

public static void main(String[] args)

{

log.info("hahah");

}

}

@Slf4j这个注解是一个源码级注解,目的是生成一个log对象,看注解的注释:

二、logback

LogBack是一个日志框架,它是Log4j作者Ceki的又一个日志组件。

1、LogBack的结构

LogBack分为3个组件,logback-core, logback-classic 和 logback-access。

其中logback-core提供了LogBack的核心功能,是另外两个组件的基础。

logback-classic则实现了Slf4j的API,所以当想配合Slf4j使用时,则需要引入这个包。

logback-access是为了集成Servlet环境而准备的,可提供HTTP-access的日志接口。

2、slf4j与logback结合使用实践

2.1  配置pom,前文已叙

2.2 配置logback的配置文件 :文件位置位于src/main/resources下,名字默认为logback.xml。logback也支持groovy格式的配置文件,如果你会用那更好。

简单的配置:

%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

一个稍微复杂的配置:

myApp1 contextName

debug

%-4d [%thread] %highlight%-5level %cyan%logger.%-10method - %message%n

${USER_HOME}/myApp1log-${bySecond}.log

%date %level [%thread] %logger{30} [%file:%line] %msg%n

debug

ACCEPT

DENY

%relative%thread%mdc%level%logger%msg

${USER_HOME}/test.html

true

${USER_HOME}/logFile.%d{yyyy-MM-dd}_%i.log

30

10KB

%-4date [%thread] %-5level %logger{35} - %msg%n%ex{full, DISPLAY_EX_EVAL}

3.过滤器

Logback的过滤器基于三值逻辑,允许把它们组装或成链,从而组成任意的复合过滤策略。过滤器很大程度上受到Linux的iptables启发。这里的所谓三值逻辑是说,过滤器的返回值只能是ACCEPT、DENY和NEUTRAL的其中一个。

如果返回DENY,那么记录事件立即被抛弃,不再经过剩余过滤器;

如果返回NEUTRAL,那么有序列表里的下一个过滤器会接着处理记录事件;

如果返回ACCEPT,那么记录事件被立即处理,不再经过剩余过滤器。

一个简单的过滤器

public class SampleFilter extends Filter {

@Override

public FilterReply decide(ILoggingEvent event) {

if (event.getMessage().contains("let")) {

return FilterReply.ACCEPT;

} else {

return FilterReply.DENY;

}

return FilterReply.NEUTRAL;

}

}

除上边几种输出源之外,logback还支持输出到远程套接字服务器、 MySQL、 PostreSQL、Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等等。

参考

logback相关说明:

java日志系统_Java日志系统相关推荐

  1. java 日志 生成_Java日志(转)

    日志对于一个系统来说非常重要,查找异常信息.分析系统运行情况等都需要用到日志.所以无论是JDK还是第三方都提供了关于日志的相关工具,本文分别介绍以下几种工具,以及各种工具间的整合.原理. JDK的ja ...

  2. 使用java自带的日志管理_java日志管理

    1.相关概念 日志统一框架(日志门面):apache commons logging.slf4j 日志实现框架(实现层):JDK自带的logging(java.util.logging).log4j. ...

  3. java 日志设计_Java日志设计实践(3) - 开发篇

    1.选择恰当的日志级别 2.输出明确的提示文字和充分的现场信息 3.输出内容一行搞定,不要换行 4.其他 1.选择恰当的日志级别 选择日志级别时需要遵循一些通用规范,不可随意定义 log4j的日志级别 ...

  4. java手机论坛_Java论坛系统巡云轻论坛 v1.2

    摘要: 巡云轻论坛系统采用JAVA+MYSQL架构,自适应手机端和电脑端,界面简洁,性能高效.后台数据库备份/还原.全站指定目录打包.一键自动升级等功能使维护简单方便.系统拥有强大的模板管... 巡云 ...

  5. java中info()_java日志中的info是啥意思

    2019-03-21 回答 首先,在项目中的classes 中新建立一个log4j.properties文件即可: 在实际编程时,要使log4j真正在系统中运行事先还要对配置文件进行定义.定义步骤就是 ...

  6. java 日志查看_Java日志

    日志对于一个系统来说非常重要,查找异常信息.分析系统运行情况等都需要用到日志.所以无论是JDK还是第三方都提供了关于日志的相关工具,本文分别介绍以下几种工具,以及各种工具间的整合.原理. JDK的ja ...

  7. java 日志使用_Java日志正确使用姿势

    前言 关于日志,在大家的印象中都是比较简单的,只须引入了相关依赖包,剩下的事情就是在项目中"尽情"的打印我们需要的信息了.但是往往越简单的东西越容易让我们忽视,从而导致一些不该有的 ...

  8. java注释日志打印_java 日志文件打印

    1 1.输出级别的种类 2 ERROR.WARN.INFO.DEBUG 3 ERROR 为严重错误 主要是程序的错误 4 WARN 为一般警告,比如session丢失 5 INFO 为一般要显示的信息 ...

  9. java 模块 分工_Java秒杀系统实战系列~构建SpringBoot多模块项目

    摘要:本篇博文是"Java秒杀系统实战系列文章"的第二篇,主要分享介绍如何采用IDEA,基于SpringBoot+SpringMVC+Mybatis+分布式中间件构建一个多模块的项 ...

最新文章

  1. Python 函数不定长参数
  2. 据说,程序员已成为女生年度最喜欢男友职业Top3?
  3. es5 温故而知新 创建私有成员、私有变量、特权变量的方法
  4. 计算机组成与设计第五版英文_南京大学计算机考研信息汇总
  5. simplexml和xpath
  6. Apache Camel 2.18发布–包含内容
  7. Subversion 服务配置安装手记(一)
  8. 深度学习(二十)基于Overfeat的图片分类、定位、检测-2014 ICLR
  9. 怎样找回W ndows7密钥,怎么找到windows7密钥
  10. 小企业主代理记账基础知识
  11. 华为网络设备交换机路由器查看日志命令方法
  12. oracle 创建cdb,Oracle 12C -- 手动创建CDB
  13. uniapp H5公众号errMsg: “onMenuShareAppMessage:fail, the permission value is offline verifying“
  14. 前端vue实现图片压缩并且将其转换为jpg格式图片;前端转换图片格式;前端使用js转换图片格式;前端使用canvas将png格式图片转成jpg格式
  15. 数字转换成英文 金额转成英文大写
  16. 解决: 在类xxx 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[]
  17. 颜色恒常性 Retinex
  18. 反问疑问_反问疑问句
  19. python怎么算阶乘_python专家写阶乘 ()用python计算阶乘
  20. 网络流中最大流和最小割算法

热门文章

  1. MFC编译出来的程序不能在其他机器上用
  2. 【灵修】舍得——有舍有得
  3. 理解C#中的委托与事件
  4. java去掉图片上的meta信息_正确的java 8设置用于类卸载(Metaspace清理)/ cxf问题
  5. 启动不起来_电脑启动不起来该怎么办
  6. 使用ExchangeRate-API查询免费可用的汇率数据
  7. wpf开源ui引用步骤_吸引开源社区的5个步骤
  8. 我的世界变betty指令_Betty Hacker将开放式硬件电子产品嵌入蛋糕中
  9. 设计模式-观察者模式 发布/订阅模式
  10. CSS 背景附着 background-attachment属性