Java日志操作总结

Java日志操作总结

(2008-04-21 17:39:06)
标签:

杂谈

 
 使用Jakarta Commons Logging(JCL)

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.1.概述

sun在JDK1.4提供了一个专门处理日志的记录包:java.util.logging,它可以对程序中的日志记录进行相当复杂的控制。例如:通过它可以指定日志级别和日志的位置(控制台、文件、Email等),我们可以自己手动创建子记录器,通过它可以用程序控制的方式来指定记录的内容,也可以使用配置文件来指定,而不需要改动程序。

2.2.使用Logger

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.

.Level = INFO

 

# 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

 

说明:通过以上的配置,在处理日志时,就会将日志信息写入runtime.log文件中,并且在控制台也显示,若在工程中没有配置logging.properties文件,系统就会自动加载jre/lib/logging.properties配置文件内容,默认是ConsoleHandler意味着日志信息在控制台显示。

 

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);

                                  

2.2.4           使用记录器记录日志

                     

log.fine("the fine message");

log.warning("the warning message");

log.info("the info message");

log.severe("The severe message");

 

3.  使用Log4j

3.1. 概述

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

3.2. Log4j配置

3.2.1           加入log4j-1.2.8.jar到你的工程当中

3.2.2           在工程的classpath下创建log4j.properties配置文件,内容如下:

### direct log messages to stdout ###

log4j.rootLogger=info,stdout

log4j.rootLogger=debug,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.rootLogger=debug,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

# Keep one backup file

#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.

#log4j.logger.com.foo=WARN

3.2.3           在输出日志信息的类中使用Log4j

               

得到Log实例还有另外一种方式(利用LogFactory):

private static final Log logx =LogFactory.getLog(Log4jTest.class);

                  使用这种方式时要用到struts的commons-logging.jar

在实际应用中commons-logging+log4j无疑是最好的选择

3.3. Log4j配置文件详解

3.3.1       根类别

配置根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个输出目的地。

 

3.3.2       常用输出格式


-X号:X信息输出时左对齐;
%p:日志信息级别
%d{}:日志信息产生时间
%c:日志信息所在地(类名)
%m:产生的日志具体信息
%n:输出日志信息换行
举例:
log4j.appender.stdout.layout.ConversionPattern=%5p%d{yyyy-MM-ddHH:mm:ss}

 

3.3.3       输出布局


使用的输出布局,其中log4j提供4种布局:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
举例:
输出格式为HTML表格
log4j.appender.stdout.layout=org.apache.log4j.HTMLLayout

3.3.4       日志信息的输出目的地


配置日志信息输出目的地Appender,其语法为
log4j.appender.appenderName =fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
log4j.appender.appenderName.option = valueN
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
log4j支持的输出目的地:
org.apache.log4j.ConsoleAppender 控制台
org.apache.log4j.FileAppender 文件
org.apache.log4j.DailyRollingFileAppender每天产生一个日志文件
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
org.apache.log4j.net.SMTPAppender 邮件
org.apache.log4j.jdbc.JDBCAppender 数据库
其他如:GUI组件、甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等
举例:
输出到控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender(指定输出到控制台)
log4j.appender.Threshold=DEBUG(指定输出类别)
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout(指定输出布局)
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c-%-4r [%t] %-5p %c %x - %m%n(指定输出格式)
输出到文件
 log4j.appender.FILE=org.apache.log4j.FileAppender(指定输出到文件)
 log4j.appender.FILE.File=file.log(指定输出的路径及文件名)
 log4j.appender.FILE.Append=false
 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout(指定输出的布局)
  log4j.appender.FILE.layout.ConversionPattern=[framework]%d - %c -%-4r [%t] %-5p %c %x - %m%n(指定输出的格式)
输出到文件(轮换"日志文件",当日志文件达到指定大小时,该文件就被关闭并备份,然后创建一个新的日志文件)
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender(指定输出到文件)
log4j.appender.ROLLING_FILE.Threshold=ERROR(指定输出类别)
log4j.appender.ROLLING_FILE.File=rolling.log(指定输出的路径及文件名)
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB(指定输出到文件的大小)
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout(指定采用输出布局)
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d- %c -%-4r [%t] %-5p %c %x - %m%n(指定采用输出格式)

3.4. 修改日志级别

3.4.1       在程序中修改

private static final Loggerlog =Logger.getLogger(YouClassName.class);

public static voidmodify(){

log.setLevel(Level.DEBUG);

}

通过Logger的setLevel方法来进行修改

Log4j日志的常用级别按优先级顺序可以分为:

TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF

但常用的就只有5个:DEBUG,INFO,WARN,ERROR,FATAL

DEBUG:致命错误

ERROR:错误

WARN:警告

INFO:常用信息

DEBUG:调试信息

TRACE:细节

3.4.2       通过配置文件修改

通过配置文件(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

名称为IAMLogInfo日志,日志级别为INFO,输出目标为控制台

Log4j.logger.IAMLogInfo = INFO,console


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4-2日装饰器,带参数的装饰器

1&#xff0c;函数的有用信息 from functools import wraps#引用模块 def wrapper(f): # f func1wraps(f)def inner(*args,**kwargs): #聚合#args &#xff08;1,2,3&#xff09;执行函数之前的相关操作ret f(*args,**kwargs) # 打散 1,2,3执行函数之后的相关操作return re…

Apache Storm:如何使用Flux配置KafkaBolt

微型框架中的助焊剂可以帮助我们定义和部署Storm拓扑。 Flux有各种包装器&#xff0c;可帮助您定义所需的流并初始化Bolts和Spouts&#xff08;使用带有或不带有参数的构造函数&#xff0c;并通过反射自动调用自定义配置方法&#xff09;。 您只需要使用Flux就是将其作为依赖…

java 获取当前函数名

import java.text.SimpleDateFormat; import java.util.Date; /** * Java实现类似C/C中的__FILE__、__FUNC__、__LINE__等,主要用于日志等功能中。 * * version 1.0 2011-07-13 * */ public abstract class CommonFunction { /** * 打印日志时获取当前的程序文件名、行号、方法…

美国华尔街拥抱区块链是最大的威胁

Overstock的首席执行官帕特里克伯恩宣布证券交易委员会已批准其计划在区块链上发行股票&#xff0c;该区块链是推动比特币数字货币的巨大在线分类账。 这是一个重要的时刻。至少在理论上&#xff0c;区块链可以更有效&#xff0c;准确和公开地跟踪股票&#xff0c;债券和其他金…

java枚举和枚举类_Java枚举:您拥有优雅,优雅和力量,这就是我所爱!

java枚举和枚举类当Java 8即将面世时&#xff0c;您确定您对Java 5中引入的枚举很熟悉吗&#xff1f; Java枚举仍然被低估了&#xff0c;很可惜&#xff0c;因为它们比您想象的要有用&#xff0c;它们不仅仅用于通常的枚举常量&#xff01; Java枚举是多态的 Java枚举是可以包…

Java关键字final、static使用总结

Java关键字final、static使用总结 一、final 根据程序上下文环境&#xff0c;Java关键字final有“这是无法改变的”或者“终态的”含义&#xff0c;它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变&#xff1a;设计或效率。 final类不能被继承…

【SpringCloud】第五篇: 路由网关(zuul)

前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。 工具:…

ubuntu shell简介

ubuntu shell简介 (2012-03-13 19:48:09) 标签&#xff1a; 杂谈 分类&#xff1a; 虚拟机下的ubuntu8.04 1.什么是shell&#xff1f; shell是接受用户或应用层的命令&#xff0c;并将这些命令解释给底层的系统内核层&#xff0c;由这些内核完成相应的工作&#xff0c;并将结果…

如何更新Jenkins作业发布config.xml

最近&#xff0c;我想更新Cloudbees中的一些作业&#xff08;未使用DSL定义&#xff09;&#xff0c;为每个作业添加一些属性。 好吧&#xff0c;我在使其工作时遇到了一些麻烦&#xff0c;这是我的注意事项&#xff08;我使用的是Jenkins 1.651.2.1&#xff0c;但有可能它应与…

月下“毛景树”

Description 毛毛虫经过及时的变形&#xff0c;最终逃过的一劫&#xff0c;离开了菜妈的菜园。 毛毛虫经过千山万水&#xff0c;历尽千辛万苦&#xff0c;最后来到了小小的绍兴一中的校园里。爬啊爬~爬啊爬~~毛毛虫爬到了一颗小小的“毛景树”下面&#xff0c;发现树上长着他最…

自由口通信模式下计算机读写PLC存储区的程序

自由口通信模式下计算机读写PLC存储区的程序 2008-8-20 8:51:00 来源&#xff1a;摘 要&#xff1a;本文介绍了在自由口通信模式下&#xff0c;用计算机读写S7-200 PLC存储区内相邻的多个字节数据的通信程序设计方法&#xff0c;程序设计中采用了多种可靠性措施。 关键词&…

Zookeeper入门

ZooKeeper 是一个开源的分布式协调架&#xff0c;主要用来解决分布式集群中应用系统的一致性问题 本质 分布式的文件存储系统(Zookeeper文件系统监听机制)&#xff0c;是一个基于观察者模式设计的分布式服务管理框架 zookeeper的数据结构 Zookeeper的层次模型称作Data Tree,…

【laravel5.4】重定向带参数

1、 2、重定向回上一页面 3、返回上一页面带参数 转载于:https://www.cnblogs.com/xuzhengzong/p/8715463.html

Google Protocol Buffers 2.3.0 for java 快速开始

Google Protocol Buffers &#xff12;.3.0 for java 快速开始 博客分类&#xff1a; Java JavaGoogleUbuntuLinux数据结构Protocol Buffers是一个平台中立&#xff0c;编程语言无关的&#xff0c;可扩展的机制&#xff0c;是用于结构化数据串行化的灵活、高效、自动的方法&a…

jenkins api_接触Jenkins(Hudson)API,第2部分

jenkins api这篇文章从本教程的第1部分继续。 已经快一年了&#xff0c;但是我终于有时间重新审视我为与Jenkins api交互而编写的一些代码。 我已经使用了部分工作来帮助管理许多Jenkins构建服务器&#xff0c;主要是保持插件同步以及将作业从一台机器移动到另一台机器。 在本文…

JAVAC 命令详解

JAVAC 命令详解 结构 javac [ options ] [ sourcefiles ] [ files ]参数可按任意次序排列。 options 命令行选项。 sourcefiles 一个或多个要编译的源文件&#xff08;例如 MyClass.java&#xff09;。 files 一个或多个对源文件进行列表的文件。 说明 javac 有两种方法可将源…

[MEGA DEAL]终极Java捆绑包(95%折扣)

通过114个小时的培训来掌握这种流行的编码语言&#xff0c;从而开始您的编程奥德赛 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了一个极端的报价 。 我们提供的Ultimate Java Bundle 仅售69美元&#xff0c;而不是原始价…

Mybatis 在 insert 之后想获取自增的主键 id,但却总是返回1

记录一次傻逼的问题&#xff0c; 自己把自己蠢哭&#xff1a;Mybatis 在 insert 之后想获取自增的主键 id&#xff0c;但却总是返回1 错误说明&#xff1a; 返回的1是影响的行数&#xff0c;并不是自增的主键id&#xff1b; 想要获取自增主键id&#xff0c;需要通过xx.getId()方…

android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】

android与PC&#xff0c;C#与Java 利用protobuf 进行无障碍通讯【Socket】 2011-04-27 17:00:11 标签&#xff1a;休闲 Java Socket 移动开发 android 原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律…

Confluence 6 自动添加用户到用户组

默认组成员&#xff08;Default Group Memberships&#xff09;选项在 Confluence 3.5 及后续版本和 JIRA 4.3.3 及后续版本中可用。这字段将会在你选择 Read Only, with Local Groups 权限后出现。如果你希望你的用户能自动添加到用户组或多个用户组&#xff0c;在这里输入你希…