[转]slf4j 与log4j 日志管理
log4j简易入门
package test.log4j;
import org.apache.log4j.Logger;
public class HelloLog4j {
private static final Logger logger = Logger.getLogger(HelloLog4j.class);
public static void main(String[] args) {
logger.debug("This is debug message");
logger.info("This is info message");
logger.warn("This is warn message");
logger.error("This is error message");
}
}
- log4j简单配置log4j.properties
可以设置级别:debug < info < warn < error
debug: 显示debug, info, warn, error
info: 显示info, warn, error
warn: 显示warn, error
error: 只显示error
日志的输出级别由rootLogger和普通Logger设置的最高级别决定。
log4j.rootLogger=debug,appender1
log4j.rootLogger=info,appender1
log4j.rootLogger=warn,appender1
log4j.rootLogger=error,appender1
输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
样式为TTCCLayout
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
这里配置的是类所在的包test.log4j, 逗号之前未配置日志输出级别,默认为根logger的级别
log4j.logger.test.log4j=, TEST
log4j.appender.TEST=org.apache.log4j.ConsoleAppender
log4j.appender.TEST.layout=org.apache.log4j.TTCCLayout
log4j提供的Appender
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
log4j提供的Layout
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,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)
以上资料参考:http://www.iteye.com/topic/378077
slf4j简介
SLF4J不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。
slf4j简单示例
package test.slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloSlf4j {
private static final Logger logger = LoggerFactory.getLogger(HelloSlf4j.class);
public static void main(String[] args) {
logger.debug("This is debug message");
logger.info("This is info message");
logger.warn("This is warn message");
logger.error("This is error message");
}
}
假设使用log4j做为底层日志工具,运行以上程序需要三个包:log4j-1.2.xx.jar、slf4j-api-x.x.x.jar、以及slf4j-log4j12-x.x.x.jar,后两个包由slf4j提供,包名中的x表示版本号。
获得logger对象:
java代码:
private static final Logger logger = LoggerFactory.getLogger(Test.class);
输出日志信息:
logger.debug(“debug”);
slf4j中的占位符—不再需要冗长的级别判断
大家应该还记得,在log4j中,为了提高运行效率,往往在输出信息之前,还要进行级别判断,以避免无效的字符串连接操作。如下:
if (logger.isDebugEnabled()){
logger.debug(“debug:“+name);
}
slf4j巧妙的解决了这个问题:先传入带有占位符的字符串,同时把其他参数传入,在slf4j的内容部实现中,如果级别合适再去用传入的参数去替换字符串中的占位符,否则不用执行。
logger.info("{} is {}", new String[]{“x",“y"});
[转]slf4j 与log4j 日志管理的更多相关文章
- commons-logging和Log4j 日志管理/log4j.properties配置详解
commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...
- 项目log4j日志管理详解
项目log4j日志管理详解 log4j日志系统在项目中重要性在这里就不再累述,我们在平时使用时如果没有特定要求,只需在log4j.properties文件中顶入输出级别就行了.如果要自定义输出文件,对 ...
- org.slf4j:slf4j-api:添加日志管理
org.slf4j:slf4j-api:添加日志管理 转 https://blog.csdn.net/wolfking0608/article/details/77855624 一个好的程序, 完 ...
- Hibernate4搭建Log4J日志管理(附Log4j.properties配置详解)
1.首先加入slf4j的jar包,即slf4j-api-1.6.1.jar 在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate- ...
- Spring集成log4j日志管理
原文地址:http://blog.csdn.net/naruto1021/article/details/7969535 在使用Spring框架的时候,我们可以很方便的配置log4j来进行日志管理. ...
- android log4j日志管理的使用
以下为log4j1的日志管理,在android 6.0 一下能正常使用,时候更加高级的胃log4j2,持续跟新 android中的log4j日志文件使用需要两个包,我们不需要进行配置文件的配置,一切都 ...
- Log4j日志管理的简单实例
大型项目中非常多情况下要分析程序的日志信息,怎样管理自己的日志信息至关重要. 在应用程序中加入日志记录总的来说基于三个目的 , 监视代码中变量的变化情况,周期性的记录到文件里供其它应用进行统计分析工作 ...
- Spring Boot 整合 slf4j+log4j2 实现日志管理
背景 Java 中比较常用的日志框架: log4j(Log for Java):Apache 的一个开源项目,七种日志级别:OFF.FATAL.ERROR.WARN.INFO.DEBUG.TRACE ...
- Log4J日志管理类使用详解 (转)
一.前言: log4j 是一个开放源码项目,是广泛使用的以Java编写的日志记录包.由于log4j出色的表现, 当时在log4j完成时,log4j开发组织曾建议sun在jdk1.4中用log4j取代j ...
随机推荐
- 构建缓存gradle
结合Kotlin使用Gradle build cache 宛丘之上兮 关注 2018.03.11 00:21* 字数 1177 阅读 505评论 5喜欢 4 在2017年4月,Gradle发布了bui ...
- HTTP是用来做什么的
(一)HTTP协议介绍 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目 ...
- js身份证掩饰成**(class循环处理)
$('.shijian').each(function (i){ value=$(this).attr('data');value1=value.replace(/^(.{3})(?:\d+)(.{4 ...
- webstocket 聊天
/** * 初始化socket **/ function initSocket(index_host){//端口号 if( !window.WebSocket ){ console.log(" ...
- Linux命令_1
文件和目录命令 从P19开始的笔记 目标 查看目录内容 ls 切换目录 cd 创建和删除操作 touch mkdir rm 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 ...
- python学习day6 for循环 字符串的内置方法
1.for循环 和while相比 l=[1,2,3] i=0 while i <len(l) print(l[i]) i+=1 l=['a','b','c'] for item in l: pr ...
- Oracle中dbms_random.string 的用法
转载:https://blog.csdn.net/simonchi/article/details/8657787 DBMS_RANDOM.STRING(var1,var2) 这个函数有两个参数 va ...
- set<pair<int,int> >的用法
例题链接:https://vjudge.net/contest/236677#problem/D 题意:首先输入两个数字n,m.n表示有n张桌子,编号从1到n,m表示有m个操作, 然后接下来一行有n个 ...
- springboot 日志2
SpringBoot关于日志的官方文档 1.简述 SpringBoot官方文档关于日志的整体说明 本博客基于SpringBoot_1.3.6大家请先简单看下这篇英文的官方文档,文中有说 Sprin ...
- Html中Select的增删改查排序,和jQuery中的常用功能
这里主要通过select引出常用的jquery 前台页面 <select class="form-control" id="commonSelect"&g ...