Java日志操作总结
Java日志操作总结
(2008-04-21 17:39:06)
标签:
杂谈 |
1.1. 概述
Apache的开源日志组件Jakarta CommonsLogging(JCL)提供的是一个日志(Log)接口(Interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。JCL提供的接口,对其它一些日志工具,包括Log4J,Avalon LogKit, and JDK1.4等,进行了简单的包装。Commons-logging的目的是为“所有的JAVA日志实现”提供一个同一的接口,它本身的日志功能比较弱(只有一个简单的SimpleLog实现类),所以一般不会单独使用它,可以结合功能强大的Log4j使用。
1.2. 配置commons-logging
1.2.1 将commons-logging.jar导入工程,若使用log4j还需导入log4j-1.2.8.jar
1.2.2 JCL首先在classpath下寻找自己的配置文件commons-logging.properties,如果找到就是使用其中的Log实现类
commons-logging.properties文件
# commons-logging.properties
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
# simplelog.properties
# # Logging detail level,
# # Must be one of ("trace", "debug", "info","warn", "error", or "fatal").
#org.apache.commons.logging.simplelog.defaultlog=trace
org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
1.2.3 如果上面的步骤失败,Commons的Logging接着检查系统属性org.apache.commons.logging.Log。
1.2.4 如果找不到org.apache.commons.logging.Log系统属性,Logging接着在CLASSPATH中寻找log4j的类。如果找到了,Logging就假定应用要使用的是log4j。不过这时log4j本身的属性仍要通过log4j.properties文件正确配置。
1.2.5 如果上述查找均不能找到适当的Logging API,但应用程序正运行在JRE1.4或更高版本上,则默认使用JRE 1.4的日志记录功能。
1.2.6 最后,如果上述操作都失败,则应用将使用内建的SimpleLog。SimpleLog把所有日志信息直接输出到System.err。
1.3. 使用Log
1.3.1 导入所需的commons-logging类
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; |
1.3.2 利用LogFactory创建Log实例
private static final Loglog =LogFactory.getLog(ApacheLoggingDemo.class); |
1.3.3 使用org.apache.commons.logging.Log类的成员方法输出日志信息
log.info("commons-logging infomessage"); log.debug("debug message"); log.error("error message"); log.warn("warnning message"); log.trace("trace message"); |
2. 使用JDK1.4Logger
2.2.1 在工程中创建配置文件logging.properties,内容如下:
# "handlers" specifies a comma separated list oflog Handler
handlers =java.util.logging.FileHandler,java.util.logging.ConsoleHandler
# Default global logging level.
# default file output is in user's homedirectory.
java.util.logging.FileHandler.pattern =runtime.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 2
java.util.logging.FileHandler.formatter =java.util.logging.XMLFormatter
# Limit the message that are printed on the consoleto INFO and above.
java.util.logging.FileHandler.level = INFO
java.util.logging.ConsoleHandler.formatter =java.util.logging.SimpleFormatter
2.2.2 创建日志管理器LogManager实例并加载配置文件(logging.properties)
LogManager logMgr = LogManager.getLogManager(); FileInputStream fin = new FileInputStream(newFile( "src/logging.properties")); logMgr.readConfiguration(fin); |
2.2.3 创建记录器Logger,并将其添加到当前日志管理器
log =Logger.getLogger(this.getClass().getName()); logMgr.addLogger(log); |
log.fine("the fine message"); log.warning("the warning message"); log.info("the info message"); log.severe("The severe message"); |
3. 使用Log4j
3.2.1 加入log4j-1.2.8.jar到你的工程当中
3.2.2 在工程的classpath下创建log4j.properties配置文件,内容如下:
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyy-MM-ddHH:mm:ss } [%t] %5p %c{1}:%L - %m%n
#log4j.logger.org.hibernate=fatal
#log4j.logger.net.sf.hibernate=fatal
#log4j.logger.net.sf.hibernate.SQL=fatal
#log4j.logger.net.sf.hibernate.type=fatal
#log4j.logger.net.sf.hibernate.tool.hbm2ddl=fatal
# Set root logger level to DEBUG and its onlyappender to A1.
#log4j.rootLogger=debug, stdout, R
#log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and linenumber.
#log4j.appender.stdout.layout.ConversionPattern=%5p[%t] (%F:%L) - %m%n
# Print the date in ISO 8601 format
#log4j.appender.stdout.layout.ConversionPattern=%d[%t] %-5p %c - %m%n
#log4j.appender.R=org.apache.log4j.RollingFileAppender
#log4j.appender.R.File=example.log
#log4j.appender.R.MaxFileSize=100KB
#log4j.appender.R.MaxBackupIndex=1
#log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=%p %t %c- %m%n
# Print only messages of level WARN or above in thepackage com.foo.
得到Log实例还有另外一种方式(利用LogFactory):
private static final Log logx =LogFactory.getLog(Log4jTest.class); |
使用这种方式时要用到struts的commons-logging.jar
在实际应用中commons-logging+log4j无疑是最好的选择
配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName,...
level 是日志记录的类别
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
类别level 为OFF、FATAL、ERROR、WARN、INFO、DEBUG、log、ALL或自定义的优先级。
og4j常用的优先级FATAL>ERROR>WARN>INFO>DEBUG
配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
如果为log4j.rootLogger=WARN,则意味着只有WARN,ERROR,FATAL被输出,DEBUG,INFO将被屏蔽掉。
举例:log4j.rootLogger=INFO,stdout,Runlog,Errorlog
根日志类别为INFO,DEBUG将被屏蔽,其他的将被输出。stdout,Runlog,Errorlog分别为3个输出目的地。
private static final Loggerlog =Logger.getLogger(YouClassName.class); public static voidmodify(){ log.setLevel(Level.DEBUG); } |
TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF
但常用的就只有5个:DEBUG,INFO,WARN,ERROR,FATAL
通过配置文件(log4j.properties)可以配置指定Logger类的日志显示级别,如:
指定com.xx.foo.TestClass类中的日志级别为INFO,输出为stdout定义:
Log4j.logger.com.xx.foo.TestClass = INFO,stdout
指定com.xx.foo包下的所有类的日志级别为DEBUG,输出为stdout定义:
Log4j.logger.com.xx.foo = DEBUG,stdout
Java日志操作总结相关推荐
- JAVA记录操作日志步骤
项目地址:https://gitee.com/Selegant/logs-demo.git 说明 系统日志不论是在日常的管理还是维护中都会起到很大的作用,但是在日志的记录中通常会存在很多的问题 日志记 ...
- java 日志 生成_Java日志(转)
日志对于一个系统来说非常重要,查找异常信息.分析系统运行情况等都需要用到日志.所以无论是JDK还是第三方都提供了关于日志的相关工具,本文分别介绍以下几种工具,以及各种工具间的整合.原理. JDK的ja ...
- Java日志的心路历程
大家好,我是头发还很多的阿星 今天来和大家聊聊Java日志体系,Java日志体系可以说是五花八门,眼花缭乱. 导致很多小伙伴因为日志标准库之间复杂的关系而感到烦恼,不知道统一系统的日志标准库需要依赖哪 ...
- 使用Log4j进行日志操作(牛小浩)不错的
使用Log4j进行日志操作 一.Log4j简介 (1)概述 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是 ...
- 各种Java日志框架的比较
2019独角兽企业重金招聘Python工程师标准>>> Log4j Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件. ...
- Java 日志缓存机制的实现--转载
概述 日志技术为产品的质量和服务提供了重要的支撑.JDK 在 1.4 版本以后加入了日志机制,为 Java 开发人员提供了便利.但这种日志机制是基于静态日志级别的,也就是在程序运行前就需设定下来要打印 ...
- 分布式文件系统—HDFS—Java API操作
原文作者:jiangw-Tony 原文地址:HDFS基础使用 hdfs 在生产应用中主要是客户端的开发,其核心步骤是从 hdfs 提供的 api 中构造一个 HDFS的访问客户端对象,然后通过该客户端 ...
- 循序渐进看Java web日志跟踪(2)-Java日志API认识
接触过Java的朋友应该都会知道,java的开源框架百花齐放,实现同样的功能,总能找到几个强大的开源框架来进行选择.在日志方面,Java同样不逊色.除了JDK本身自带的简单的日志工具,java还有如l ...
- java日志——基本日志+高级日志
[0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java日志--基本日志+高级日志 的相关知识: [1]记录日志 1.1)出现的问题和解决方法 ...
最新文章
- 魅族手机使用应用沙盒一键修改位置数据
- CentOS安装和配置Mysql
- 使用ajaxfileupload.js实现文件上传
- [html] viewport常见设置都有哪些?
- EJB是什么?EJB的概念分析与理解(copy)
- 09-Flutter移动电商实战-移动商城数据请求实战
- python输出子列表_python利用递归函数输出嵌套列表的每个元素
- Java判断字符串是否是数值
- C#:XML操作类--转
- 修复Ubuntu系列pip
- 【不积跬步,无以致千里】DELETE SINGLE IPTABLES RULES
- html科学计算器,html+css+js实现科学计算器
- 一个线性四叉树编码的试题
- sequel pro 格式化sql
- 写一篇本科/硕士毕业论文究竟需要看多少篇文献?
- 细说共模干扰和差模干扰(四个腿的电感是什么?有什么作用?)
- UE5 预览版载具模板工程车不能移动的问题
- python绘制树状excel表格_Python-使用XlsxWriter模块在Excel工作表中绘制柱形图
- IT常用职位缩写总结
- win7软件图标异常解决
热门文章
- NS3使用过程中重要内容整理
- 【渝粤教育】国家开放大学2018年春季 0184-21T行政职业能力 参考试题
- [渝粤教育] 西南科技大学 国际贸易理论与实务 在线考试复习资料2021版(2)
- 网络 计算机不显示不出来,网页图片显示不出来怎么办 网络故障解决【详解】...
- php只显示一部分文章,typecho同一个页面下调用不同分类的文章但是却只显示一个分类文章...
- flutterapp部分手机无法打开_Flutter应用程序在最新更新后无法运行
- 发言稿开场白范文_发言稿开场白
- prove, verify, bear out, demonstrate, confirm, validate, testify, certify 的区别
- 江苏省计算机等级知识,江苏省计算机二级考试基础知识_计算机基础练习题
- C语言实用算法系列之冒泡排序、sizeof与strlen的区别