- 浏览: 3422369 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
https://github.com/looly/hutool/wiki/Slf4j-Logger-%E7%9A%84%E5%B0%81%E8%A3%85%E2%80%94%E2%80%94Log
很多时候我们为了在类中加日志不得不写一行,而且还要去手动改XXX这个类名
第二个问题,我特别喜欢这种形式:
log.info("我在XXX 改了 {} 变量", "name");
既省去了可恶的isInfoEnabled()的判断,还避免了拼接字符串,但是呀
这样就不支持了,烦躁……
写多了就觉得这种厌烦的工作实在让人无法忍受,于是就封装了下。
Demo:
总结下来如果日志比较少,可以直接使用静态方法Log.xxx,如果日志量很大,那么首先要构建好Logger,使用:
```Java
比之前简短了很多,而且随便复制。 调用Logger.xxx(log, "消息");
对于不能使用format的情况,我把Throwable放在前面了,这样就可以使用动态参数了 Object... argument
好吧,就到这里,欢迎批评指正以及提供意见~~~
很多时候我们为了在类中加日志不得不写一行,而且还要去手动改XXX这个类名
private static Logger log = LoggerFactory.getLogger(XXX.class);
第二个问题,我特别喜欢这种形式:
log.info("我在XXX 改了 {} 变量", "name");
既省去了可恶的isInfoEnabled()的判断,还避免了拼接字符串,但是呀
log.error("错误消息", e);
这样就不支持了,烦躁……
写多了就觉得这种厌烦的工作实在让人无法忍受,于是就封装了下。
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Log { /** * 获得Logger * @param clazz 日志发出的类 * @return Logger */ public static Logger get(Class<?> clazz) { return LoggerFactory.getLogger(clazz); } /** * 获得Logger * @param name 自定义的日志发出者名称 * @return Logger */ public static Logger get(String name) { return LoggerFactory.getLogger(name); } /** * @return 获得日志,自动判定日志发出者 */ public static Logger get() { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); return LoggerFactory.getLogger(stackTrace[2].getClassName()); } //----------------------------------------------------------- Logger method start //------------------------ Trace /** * Trace等级日志,小于debug<br> * 由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!! * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void trace(String format, Object... arguments) { trace(innerGet(), format, arguments); } /** * Trace等级日志,小于Debug * @param log 日志对象 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void trace(Logger log, String format, Object... arguments) { log.trace(format, arguments); } //------------------------ debug /** * Debug等级日志,小于Info<br> * 由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!! * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void debug(String format, Object... arguments) { debug(innerGet(), format, arguments); } /** * Debug等级日志,小于Info * @param log 日志对象 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void debug(Logger log, String format, Object... arguments) { log.debug(format, arguments); } //------------------------ info /** * Info等级日志,小于Warn<br> * 由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!! * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void info(String format, Object... arguments) { info(innerGet(), format, arguments); } /** * Info等级日志,小于Warn * @param log 日志对象 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void info(Logger log, String format, Object... arguments) { log.info(format, arguments); } //------------------------ warn /** * Warn等级日志,小于Error<br> * 由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!! * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void warn(String format, Object... arguments) { warn(innerGet(), format, arguments); } /** * Warn等级日志,小于Error * @param log 日志对象 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void warn(Logger log, String format, Object... arguments) { log.warn(format, arguments); } /** * Warn等级日志,小于Error<br> * 由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!! * @param e 需在日志中堆栈打印的异常 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void warn(Throwable e, String format, Object... arguments) { warn(innerGet(), e, format(format, arguments)); } /** * Warn等级日志,小于Error * @param log 日志对象 * @param e 需在日志中堆栈打印的异常 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void warn(Logger log, Throwable e, String format, Object... arguments) { log.warn(format(format, arguments), e); } //------------------------ error /** * Error等级日志<br> * 由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!! * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void error(String format, Object... arguments) { error(innerGet(), format, arguments); } /** * Error等级日志<br> * @param log 日志对象 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void error(Logger log, String format, Object... arguments) { log.error(format, arguments); } /** * Error等级日志<br> * 由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!! * @param e 需在日志中堆栈打印的异常 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void error(Throwable e, String format, Object... arguments) { error(innerGet(), e, format(format, arguments)); } /** * Error等级日志<br> * 由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!! * @param log 日志对象 * @param e 需在日志中堆栈打印的异常 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */ public static void error(Logger log, Throwable e, String format, Object... arguments) { log.error(format(format, arguments), e); } //----------------------------------------------------------- Logger method end //----------------------------------------------------------- Private method start /** * 格式化文本 * @param template 文本模板,被替换的部分用 {} 表示 * @param values 参数值 * @return 格式化后的文本 */ private static String format(String template, Object... values) { return String.format(template.replace("{}", "%s"), values); } /** * @return 获得日志,自动判定日志发出者 */ private static Logger innerGet() { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); return LoggerFactory.getLogger(stackTrace[3].getClassName()); } //----------------------------------------------------------- Private method end }
Demo:
import org.slf4j.Logger; import xxx.Log; public class Test { private static Logger log = Log.get(); public static void main(String[] args) { //第一种使用方法(效率低) Log.debug("我是一条debug消息"); //第二种使用方法 Log.debug(log, "我是一条debug消息 {} {}", "参数1", "参数2"); RuntimeException e = new RuntimeException("错误"); //第一种使用方法(效率低) Log.error("我是一条error消息"); //第二种使用方法 Log.error(log, e, "<-异常对象放前面, 我是一条带参数的error消息 {} {}", "参数1", "参数2"); } }
总结下来如果日志比较少,可以直接使用静态方法Log.xxx,如果日志量很大,那么首先要构建好Logger,使用:
```Java
private static Logger log = Log.get();
比之前简短了很多,而且随便复制。 调用Logger.xxx(log, "消息");
对于不能使用format的情况,我把Throwable放在前面了,这样就可以使用动态参数了 Object... argument
好吧,就到这里,欢迎批评指正以及提供意见~~~
发表评论
-
分布式存储系统GlusterFS安装配置
2016-06-27 14:51 1030http://navyaijm.blog.51cto.com/ ... -
Java Comparable和Comparator
2016-06-26 08:52 694http://my.oschina.net/android52 ... -
分布式查询 presto 入门安装使用
2016-06-24 15:44 2502http://my.oschina.net/chengxiao ... -
Java集合框架之fastutil & koloboke
2016-06-23 14:04 2471Java集合框架之fastutil http://rensan ... -
跟我学习dubbo
2016-06-17 15:20 1066跟我学习dubbo-目录 http://bluereader. ... -
JavaMelody监控web服务器
2016-06-17 14:20 1178JavaMelody监控web服务器 http://my.os ... -
freemarker使用记录
2016-06-08 16:24 1309freeMarker语法 http://uule.iteye. ... -
freemarker判断是否为空
2016-06-08 16:03 2http://www.oschina.net/code/sni ... -
ehcache 分布式支持
2016-06-05 22:26 1098原文 http://my.oschina.net/glenxu ... -
Intellij IDEA插件开发入门
2016-05-26 11:42 2882原文: http://blog.csdn.net/dc_726 ... -
阿里巴巴Druid数据源的配置与使用
2016-05-24 17:42 1543http://my.oschina.net/wjme/blog ... -
分布式任务调度组件 Uncode-Schedule
2016-05-13 14:47 2286http://www.oschina.net/p/uncode ... -
mysql中间件研究(Atlas,cobar,TDDL), 分库分表插件
2016-05-09 14:15 3444http://www.guokr.com/blog/47576 ... -
Java集合: Queue和Deque
2016-05-09 09:49 1862Queue http://my.oschina.net/kev ... -
使用gzip优化web应用(filter实现)
2016-05-07 01:45 1031使用gzip优化web应用(filter实现) http:// ... -
Fedora安装Redis
2016-05-04 08:56 1413管理工具: centos6.3下安装phpredisadmin ... -
redis-install.sh
2016-05-04 08:56 4#!/bin/bash # From here: http: ... -
redis 集群中Session解决方案之Spring Session
2016-05-04 08:54 1315集群中Session解决方案之Spring Session h ... -
使用Spring-data进行Redis操作
2016-05-04 08:54 4791使用Spring-data进行Redis操作 http://z ... -
Shiro集群实现
2016-05-04 08:53 2313apache shiro集群实现(一) session共享 h ...
相关推荐
剩下的文件名,如"slf4j_and_slf4j_jdk_test"、"slf4j_and_log4j_test"、"slf4j_and_slf4j_simple_test"可能是相关的测试代码,用于验证不同配置和绑定的正确性。 SLF4J的优势在于它的灵活性和可插拔性。你可以根据...
SLF4J(Simple Logging Facade for Java)是Java日志记录的一个接口层,它为各种日志框架,如Log4j、Logback等提供了一个统一的API,使得开发者可以在项目开发过程中方便地更换日志实现。这个标题提到的是两个SLF4J...
Logback则是SLF4J的一个具体实现,由log4j的创始人Ceki Gülcü创建。它在性能、可配置性和灵活性上优于log4j。Logback的配置文件通常以`logback.xml`或`logback.groovy`的形式存在,允许我们定义不同的日志级别(如...
Slf4j允许开发者在部署时通过Maven或类路径中的桥接器替换日志实现,如Log4j、Logback等。使用Slf4j的好处在于解耦了日志实现和应用代码,使得日志系统的选择更加灵活。在SpringBoot中,通常会默认集成Logback作为...
"Log4j的jar包和properties文件" 暗示了这个压缩包包含了Log4j运行所需的核心组件——.jar文件,以及配置文件——通常为`log4j.properties`或`log4j.xml`。`.jar`文件是Java的归档文件,它封装了类和资源,使得Log4j...
此外,对于`Log.java`,这可能是对`org.apache.log4j.Logger`或`org.slf4j.Logger`接口的封装。确保在使用`Log`接口的方法时,正确传递类名参数。 通过这种方式,我们能够确保即使在间接调用Log4j的情况下,日志中...
SLF4J是一个接口层,允许开发者在运行时插入任何日志框架,如Logback或Log4j。 描述中同样强调了`scala-logging`的特性,即其便捷性与性能优化,表明这个库在保留了SLF4J的灵活性的同时,为Scala程序员提供了更加...
例如,引入`java.util.logging.Logger`或者第三方库如`Logback`、`SLF4J`、`Android-Logging-Wrapper`等,它们提供了更丰富的功能和更好的性能。这些库支持动态配置日志级别、多输出目标(控制台、文件、网络等)、...
Spring Boot默认集成了多种日志框架,如Logback、Log4j2等,但首选推荐的是Slf4j(Simple Logging Facade for Java)。Slf4j是一个接口层,允许我们选择不同的日志实现,比如Logback、Log4j等,而无需更改代码。...
SLF4j 提供了六种用法,分别是直接使用 SLF4J API、使用 Log4j、使用 JUL、使用 JCL、使用 Logback 和使用 jboss-logging。每种用法都有其对应的日志实现框架。 让系统中所有的日志都统一到 SLF4j 的做法是将系统中...
如果遇到“Java Error”涉及日志问题,可能是日志配置文件(如logback.xml或log4j.properties)错误,或者是没有正确地引入或配置SLF4J的依赖。 总之,解决Java错误需要我们具备扎实的Java基础知识,良好的编程习惯...
通常,我们会使用Apache Commons Logging、Log4j、SLF4J(Simple Logging Facade for Java)或Java内置的java.util.logging框架来记录应用程序运行时的信息。在J2EE环境中,可以通过配置这些日志库,指定日志输出...
- **slf4j-api-1.5.2.jar** 及 **slf4j-log4j12-1.5.2.jar**:用于日志记录的 SLF4J API 和 Log4J 实现。 - **log4j-1.2.14.jar**:提供对 Log4J 的支持。 **第二步:创建并配置工程** - **新建 Java 工程**:选择...
在Java中,常见的日志框架有Log4j、SLF4J(Simple Logging Facade for Java)、Java Util Logging(JUL)等。这些框架提供了丰富的功能,如日志级别控制、多目标输出(如文件、控制台、网络)和日志格式定制等。 ...
- **SLF4J兼容**:与SLF4J接口完全兼容,可以方便地切换到其他日志实现,如Logback、Log4j等。 3. **使用方法** 首先,需要引入Scala Logging的依赖。在`build.sbt`或`pom.xml`中添加相应的库依赖。然后,通过...
眼下java应用日志收集都是採用日志框架(slf4j、apachecommonslogging)+日志系统(log4j、log4j2、LogBack、JUL等)的方式。日志框架:提供日志调用的接口,实际的日志输出托付给日志系统实现。JCL...
2. **日志库**:下载slf4j1.5.2.zip,解压后得到slf4j-api-1.5.2.jar与slf4j-log4j12-1.5.2.jar,同时需要添加Log4j的jar包,确保版本兼容。 3. **配置日志属性**:在Java项目中添加log4j.properties文件,配置日志...
Spring框架支持多种日志记录框架,包括Commons Logging、SLF4J和Log4J等。 - **不使用Commons Logging**:如果项目已经使用了其他日志框架,可以选择不使用Commons Logging。 - **使用SLF4J**:SLF4J是一个日志门面...
3. **日志管理**:通过引入`org.slf4j.Logger`和`LoggerFactory`,项目使用了SLF4J(Simple Logging Facade for Java)作为日志抽象层,允许灵活地选择具体的日志实现(如Logback或Log4j)。`logger.info()`方法用于...
Commons Logging的实现不依赖于具体的日志实现工具,仅仅提供一些日志操作的抽象接口,它对其他的日志工具做了封装,比如Log4J, Avalon LogKit, 和JDK 1.4等。 8. Darks Logs Darks Logs和log4j类似,也适用于Java...