java日志系统_Java日志系统
前言
各组件之间的关系:
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日志系统相关推荐
- java 日志 生成_Java日志(转)
日志对于一个系统来说非常重要,查找异常信息.分析系统运行情况等都需要用到日志.所以无论是JDK还是第三方都提供了关于日志的相关工具,本文分别介绍以下几种工具,以及各种工具间的整合.原理. JDK的ja ...
- 使用java自带的日志管理_java日志管理
1.相关概念 日志统一框架(日志门面):apache commons logging.slf4j 日志实现框架(实现层):JDK自带的logging(java.util.logging).log4j. ...
- java 日志设计_Java日志设计实践(3) - 开发篇
1.选择恰当的日志级别 2.输出明确的提示文字和充分的现场信息 3.输出内容一行搞定,不要换行 4.其他 1.选择恰当的日志级别 选择日志级别时需要遵循一些通用规范,不可随意定义 log4j的日志级别 ...
- java手机论坛_Java论坛系统巡云轻论坛 v1.2
摘要: 巡云轻论坛系统采用JAVA+MYSQL架构,自适应手机端和电脑端,界面简洁,性能高效.后台数据库备份/还原.全站指定目录打包.一键自动升级等功能使维护简单方便.系统拥有强大的模板管... 巡云 ...
- java中info()_java日志中的info是啥意思
2019-03-21 回答 首先,在项目中的classes 中新建立一个log4j.properties文件即可: 在实际编程时,要使log4j真正在系统中运行事先还要对配置文件进行定义.定义步骤就是 ...
- java 日志查看_Java日志
日志对于一个系统来说非常重要,查找异常信息.分析系统运行情况等都需要用到日志.所以无论是JDK还是第三方都提供了关于日志的相关工具,本文分别介绍以下几种工具,以及各种工具间的整合.原理. JDK的ja ...
- java 日志使用_Java日志正确使用姿势
前言 关于日志,在大家的印象中都是比较简单的,只须引入了相关依赖包,剩下的事情就是在项目中"尽情"的打印我们需要的信息了.但是往往越简单的东西越容易让我们忽视,从而导致一些不该有的 ...
- java注释日志打印_java 日志文件打印
1 1.输出级别的种类 2 ERROR.WARN.INFO.DEBUG 3 ERROR 为严重错误 主要是程序的错误 4 WARN 为一般警告,比如session丢失 5 INFO 为一般要显示的信息 ...
- java 模块 分工_Java秒杀系统实战系列~构建SpringBoot多模块项目
摘要:本篇博文是"Java秒杀系统实战系列文章"的第二篇,主要分享介绍如何采用IDEA,基于SpringBoot+SpringMVC+Mybatis+分布式中间件构建一个多模块的项 ...
最新文章
- Python 函数不定长参数
- 据说,程序员已成为女生年度最喜欢男友职业Top3?
- es5 温故而知新 创建私有成员、私有变量、特权变量的方法
- 计算机组成与设计第五版英文_南京大学计算机考研信息汇总
- simplexml和xpath
- Apache Camel 2.18发布–包含内容
- Subversion 服务配置安装手记(一)
- 深度学习(二十)基于Overfeat的图片分类、定位、检测-2014 ICLR
- 怎样找回W ndows7密钥,怎么找到windows7密钥
- 小企业主代理记账基础知识
- 华为网络设备交换机路由器查看日志命令方法
- oracle 创建cdb,Oracle 12C -- 手动创建CDB
- uniapp H5公众号errMsg: “onMenuShareAppMessage:fail, the permission value is offline verifying“
- 前端vue实现图片压缩并且将其转换为jpg格式图片;前端转换图片格式;前端使用js转换图片格式;前端使用canvas将png格式图片转成jpg格式
- 数字转换成英文 金额转成英文大写
- 解决: 在类xxx 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[]
- 颜色恒常性 Retinex
- 反问疑问_反问疑问句
- python怎么算阶乘_python专家写阶乘 ()用python计算阶乘
- 网络流中最大流和最小割算法
热门文章
- MFC编译出来的程序不能在其他机器上用
- 【灵修】舍得——有舍有得
- 理解C#中的委托与事件
- java去掉图片上的meta信息_正确的java 8设置用于类卸载(Metaspace清理)/ cxf问题
- 启动不起来_电脑启动不起来该怎么办
- 使用ExchangeRate-API查询免费可用的汇率数据
- wpf开源ui引用步骤_吸引开源社区的5个步骤
- 我的世界变betty指令_Betty Hacker将开放式硬件电子产品嵌入蛋糕中
- 设计模式-观察者模式 发布/订阅模式
- CSS 背景附着 background-attachment属性