前言

在java 中实现记录日志的方式有很多种,

1. 最简单的方式,就是system.print.out ,err 这样直接在控制台打印消息了。

2. java.util.logging ; 在JDK 1.4 版本之后,提供了日志的API ,可以往文件中写日志了。

3. log4j , 最强大的记录日志的方式。 可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等。

4. commons-logging, 最综合和常见的日志记录方式, 经常是和log4j 结合起来使用。

java.util.logging --JDK 记录日志方式

system.print 这就不用多说了,

直接看一下java api 中 logging 日志的使用例子:

/**   * @author oscar999   * @date 2013-8-1* @version V1.0   */
package com.oscar999.log;import java.io.IOException;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;public class TestLogJava {public static void main(String[] args) throws IOException{Logger log = Logger.getLogger("tesglog");log.setLevel(Level.ALL);FileHandler fileHandler = new FileHandler("testlog.log");fileHandler.setLevel(Level.ALL);fileHandler.setFormatter(new LogFormatter());log.addHandler(fileHandler);log.info("This is test java util log");   }}class LogFormatter extends Formatter {@Overridepublic String format(LogRecord record) {Date date = new Date();String sDate = date.toString();return "[" + sDate + "]" + "[" + record.getLevel() + "]"+ record.getClass() + record.getMessage() + "\n";}}

这里是在eclipse 下code 和测试的。

首先定义一个Logeer的实例,并设置log 的级别,接着添加一个fileHander ,就是把日志写到文件中。在写入文件的时候,定义一个 LogFormatter对日志进行格式的渲染。

默认状况下, 日志会打印到控制台。添加filehandler 后, 会同时写入文件。 如不指定路径,日志文件将位于项目根路径下。

log4j 记录日志方式

log4j 是apache 提供的记录日志的jar 档。

下载路径:

http://logging.apache.org/log4j/1.2/download.html

这里要做的事情稍微要多一些:

1. 下载log4j 的jar 包,放入项目的lib 包中(添加到项目的build path中)。

2.  配置log4j.properties, 并放入项目的根路径下.(也可以放入其他路径,在读的时候需要指定)

看一下一个配置实例:

log4j.rootLogger=debug,stdout,logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=logfile.log
log4j.appender.logfile.MaxFileSize=512KB
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

这里指定了日志输出的级别 debug.

stdout, logfile 指定日志输出的目的地。 这两个名字可以随便取,比如 A, 或B都可以。 实际的配置是  org.apache.log4j.ConsoleAppender 和RollingFileAppender  用于指定是控制台还是文件。

另外还指定了输出的格式, 已经产生的file 的规则。

3. 测试java 文件

/**   * @author oscar999   * @date 2013-8-1* @version V1.0   */
package com.oscar999.log;import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;public class TestLog4j {public static void main(String[] args) {// 1. create logLogger log = Logger.getLogger(TestLog4j.class);// 2. get log config filePropertyConfigurator.configure("log4j.properties");// 3. start loglog.debug("Here is some DEBUG");log.info("Here is some INFO");log.warn("Here is some WARN");log.error("Here is some ERROR");log.fatal("Here is some FATAL");}}

配置稍显麻烦,但是code 时就简单多了。

commons-logging写日志方式

Commons-logging 也是Apache 提供的日志jar 档。

下载地址:

http://commons.apache.org/proper/commons-logging/download_logging.cgi

你有可能要问为什么有了log4j还有提供Commons-logging呢? 这两者有什么区别吗?

其实从Commons-logging这个名字就可以看出来, 这应该是一个日志的共用接口。实际上, 它的确是这样一个作用,

使用Commons-logging的LogFactory获取日志处理类时:

1) 首先在classpath下寻找自己的配置文件commons-logging.properties,如果找到,则使用其中定义的Log实现类;
2) 如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量org.apache.commons.logging.Log,找到则使用其定义的Log实现类;
如果在Tomact中可以建立一个叫 :CATALINA_OPTS 的环境变量
给 他的 值 : - Dorg.apache.commons.logging.Log = org.apache.commons.logging.impl.SimpleLog - Dorg.apache.commons.logging.simplelog.defaultlog = warn
3) 否则,查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类;
4) 否则,使用JDK自身的日志实现类(JDK1.4以后才有日志实现类);
5) 否则,使用commons-logging自己提供的一个简单的日志实现类SimpleLog;

先使用第一种方式来看一个实例,配置commons-logging.properties, 使用log4j来记录日志。

注意, commons-logging 要配合log4j 记录日志,必须把log4j的jar 包也导入到项目中。

1. 导入log4j 和commons-logging的jar 包

2. 配置commons-logging.properties 和 log4j.properties, 放入项目的classpath下(也就是src目录下)

注意: 单独使用log4j 的时候,log4j.properties 默认是放在项目的根目录下。

log4j.properties 的内容和上面完全相同。

看一下commons-logging.properties  的配置

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

一句话,指定使用log4j

3. 测试代码:

/**
* @author oscar999
* @date 2013-8-1
* @version V1.0
*/
package com.oscar999.log;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;public class TestLogCom {static Log log = LogFactory.getLog(TestLog.class);public static void main(String[] args) {log.debug("Here is some DEBUG");log.info("Here is some INFO");log.warn("Here is some WARN");log.error("Here is some ERROR");log.fatal("Here is some FATAL");}}

除了使用log4j 之外, 还可以配置

-org.apache.commons.logging.impl.Jdk14Logger 使用JDK1.4。
-org.apache.commons.logging.impl.Log4JLogger 使用Log4J。
-org.apache.commons.logging.impl.LogKitLogger 使用 avalon-Logkit。
-org.apache.commons.logging.impl.SimpleLog common-logging自带日志实现类。它实现了Log接口,把日志消息都输出到系统错误流System.err 中。 
-org.apache.commons.logging.impl.NoOpLog common-logging自带日志实现类。它实现了Log接口。 其输出日志的方法中不进行任何操作。

总结

以上有一条

3) 否则,查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类;

项目同时导入log4j 和commons-logging的jar 包, 不需要配置commons-logging.properties ,只需要在classpath中配置 log4j.properties就可以使用log4j的方式记录日志。这也是目前用的比较多的记录日志的方式。

java 日志技术汇总(log4j , Commons-logging,.....)相关推荐

  1. Java日志输出Logger,Commons Logging,Log4j的运用

    日志 在编写程序的过程中,常常用System.out.println()打印出执行过程中的某些变量,观察每一步的结果与代码逻辑是否符合,然后有针对性地修改代码.改好之后又要删除打印语句,这样很麻烦. ...

  2. java 日志技术_java 日志技术汇总(log4j , Commons-logging,.....)

    前言 在系列一 中, 有一个问题一直没有解决,就是部署到weblogic 中应用程序如何通过log4j写日志到文件中? 这里仅仅使用log4j, 而不使用 commons-logging, 关于log ...

  3. java日志技术:Log4J使用教程

    第一步: 导入log4j的相关jar包 第二步:编写log4j配置文件 log4j的配置文件,名字必须为log4j.properties,且在 放在src/main/resources根目录下,或者放 ...

  4. java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方案

    java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方案 参考文章: (1)java.lang.NoClass ...

  5. Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

    1.错误叙述性说明 2014-7-12 0:38:57 org.apache.catalina.core.ApplicationContext log 信息: No Spring WebApplica ...

  6. java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解决方案

    java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解决方案 NoClassDefFoundErrorLogFa ...

  7. VSCrawler 爬虫 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解决方案

    长长的报错信息如下: 13:39:15.345 [main] WARN c.v.vscrawler.core.event.EventLoop - 程序已停止 13:39:15.376 [main] I ...

  8. Java分布式技术汇总

    Java分布式技术汇总 目录 博客链接 Dubbo面试题及答案 https://blog.csdn.net/qq_24095055/article/details/88761572

  9. Java日志技术是什么

    文章目录 日志技术 日志技术介绍 日志技术体系 日志技术 日志技术介绍 想清楚的知道一个系统运行的过程和详情就需要日志记录 日志介绍: 生活中的日志: 生活中的日志就好比日记,可以记录你生活的点点滴滴 ...

最新文章

  1. HTTP协议1之协议详解--转
  2. css-三种基本选择器
  3. python可选参数定义_c#教程之定义可选参数
  4. (组合数学笔记)Pólya计数理论_Part.5_Pólya定理
  5. ORA-14402: 更新分区关键字导致分区的更改
  6. python入门基础知识实例-Python入门教程丨1300多行代码,让你轻松掌握基础知识点...
  7. windows安装composer总结
  8. python类属性用法总结
  9. java计算器流程图_我的第一个JAVA程序之计算器
  10. java面经_Java面经
  11. 用户注册页面的再次确认密码的验证方式
  12. NLP-文本挖掘-综述
  13. 干货丨时序数据库DolphinDB脚本语言的混合范式编程
  14. 01、RabbitMQ之入门
  15. 时间精力管理4象限法
  16. axure 元件_Axure流程图制作
  17. 搭建基于XDEBUG的调试环境
  18. ERP软件触发器判断单身数据为什么状态,如何执行
  19. 一文了解linux 网络协议栈(链路层)
  20. 论电子商务平台成功的几个关键点

热门文章

  1. WPF中ListBox的绑定
  2. ubuntu下,apt的参数使用,很实用呦
  3. StringBuilder和String有哪些区别?
  4. 解决JS拖拽出现的问题
  5. 未能加载文件或程序集 请移除注册表值 [HKLM/Software/Microsoft/Fusion!EnableLog] 解决方法
  6. 双系统(win8.1+ubuntu14.04)删除win下分区导致grub rescue解决方案
  7. 【方案分享】2022线上云年会云会议玩法全案策划.pptx(附下载链接)
  8. 沃尔玛宣布与TikTok达成直播带货合作?
  9. docker部署在linux怎么代理,如何在linux 上部署docker
  10. ffmpeg sdk java_推荐一个强大的音视频处理的开源项目!