详细讲解Java中log4j的使用方法

详细讲解Java中log4j的使用方法

作者: 网络 来源: 日期: 2008-1-3 23:40:24
1、Log4j是什么?

Log4j可以帮助调试(有时候debug是发挥不了作 用的)和分析,要下载和了解更具体的内容,还是访问其官方网站吧: http://jakarta.apache.org/log4j .

2、Log4j的概念

Log4j中有三个主要的组件,它们分别是 Logger、Appender和Layout,Log4j 答应开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。有一个Logger称为Root,它永远存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger()方法获得,其它Logger通过 Logger.getLogger(String name)方法。

Appender则是用来指明将所有的log信息存放到什么地方,Log4j中支持多种appender,如 console、files、GUI components、NT Event Loggers等,一个Logger可以拥有多个Appender,也就是你既可以将Log信息输出到屏幕,同时存储到一个文件中。

Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息。

Log4j中将要输出的Log信息定义了5种级别,依次为DEBUG、INFO、WARN、ERROR和FATAL,当输出时,只有级别高过配置中规定的 级别的信息才能真正的输出,这样就很方便的来配置不同情况下要输出的内容,而不需要更改代码,这点实在是方便啊。

3、Log4j的配置文件

虽然可以不用配置文件,而在程序中实现配置,但这种方法在如今的系统开发中显然是不可取的,能采用配置文件的地方一定一定要用配置文件。Log4j支持两 种格式的配置文件:XML格式和Java的property格式,本人更喜欢后者,首先看一个简单的例子吧,如下:

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 line number. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %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
 

首先,是设置root,格式为 log4j.rootLogger=[level],appenderName, ……,其中level就是设置需要输出信息的级别,后面是appender的输出的目的地,appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。 配置日志信息输出目的地Appender,其语法为

 

log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 ... log4j.appender.appenderName.option = valueN
 

 

Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(控制台)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(天天产生一个日志文件)

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

配置日志信息的格式(布局),其语法为:

 

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 .... log4j.appender.appenderName.layout.option = valueN
 

 

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平台为“\r\n”,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)

4、Log4j在程序中的使用

要在自己的程序中使用Log4j,首先需要将commons- logging.jar和logging-log4j-1.2.9.jar导入到构建路径中。然后再将log4j.properties放到src根目录下。这样就可以在程序中使用log4j了。在类中使用log4j,首先声明一个静态变量 Logger logger=Logger.getLog("classname");现在就可以使用了,用法如下:logger.debug("debug message")或者logger.info("info message"),看下面一个小例子:

 

import com.foo.Bar; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class MyApp { static Logger logger = Logger.getLogger(MyApp.class.getName()); public static void main(String[] args) { // BasicConfigurator replaced with PropertyConfigurator. PropertyConfigurator.configure(args[0]); logger.info("Entering application."); Bar bar = new Bar(); bar.doIt(); logger.info("Exiting application."); } }

转载于:https://www.cnblogs.com/amboyna/archive/2008/01/05/1027020.html

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

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

相关文章

HDU 1402——A * B Problem Plus

题意&#xff1a; 给定a&#xff0c;b&#xff0c;求a*b。 思路&#xff1a; a,b的长度都为50000&#xff0c;直接模拟计算n*m肯定超时&#xff0c;可以用快速傅里叶变化计算&#xff0c;然后再把相应的系数化简出来。 code&#xff1a; #include <iostream> #inclu…

随机广告图片

1<script language”JavaScript”>2var imageList newArray;3imageList[0] “image1.jpg”;4imageList[1] “image2.jpg”;5imageList[2] “image3.jpg”;6imageList[3] “image4.jpg”;7var urlList newArray;8urlList[0] “http://some.host/”;9urlList[1] “http://a…

HDU 4609——3-idiots

题意&#xff1a; 给定n个数&#xff0c;随机从这n个数中取3个数&#xff0c;问能组成三角形的概率是多少&#xff1f; 思路&#xff1a; 首先把统计这n个数出现的个数&#xff0c;那么会得到一个向量&#xff0c;这个向量的自我的乘积就是a[i]a[j]的可能的方案数&#xff0…

HDU 5730——Shell Necklace

题意&#xff1a; 一段长为i的项链有a[i]中装饰方法&#xff0c;问长度为n的项链有多少种装饰方式。 思路&#xff1a; 容易推出&#xff0c;dp[i]∑dp[j]*a[i-j],(1<j<i-1)那么这样就刚好符合卷积的运算&#xff0c;这样就可以愉快地使用fft了&#xff0c;不过数量级…

Core IO学习心得

最近看Core IO的内容&#xff0c;有一些心得给大家共享一下&#xff1a; Core IO作为微软IT基础架构优化框架中的一个部分。该框架包含三个部分&#xff1a;CIO&#xff0c;BPIO和APIO&#xff1a; CIO&#xff08;核心基础架构优化&#xff09;专注于核心基础机构组件&#x…

经典算法研究系列:十、从头到尾彻底理解傅里叶变换算法、上

经典算法研究系列&#xff1a;十、从头到尾彻底理解傅里叶变换算法、上 作者&#xff1a;July、dznlong 二零一一年二月二十日 推荐阅读&#xff1a;The Scientist and Engineers Guide to Digital Signal Processing&#xff0c;By Steven W. Smith, Ph.D。此书地址&#xf…

flash调用js中的方法,让js传递变量给flash (兼容 IE FF) (转)

前几天发表了 将FlashVars写在JS函数中&#xff0c;实现与后台的实时变量更新&#xff0c;但是仅支持 IE&#xff0c;随后与 Luckyer 进行了交流&#xff0c;发现用 SetVariable 可以很方便的实现多浏览器兼容。举例如下。html 页中的 JavaScript 函数&#xff1a;function Get…

经典算法研究系列:十、从头到尾彻底理解傅里叶变换算法、下

经典算法研究系列&#xff1a;十、从头到尾彻底理解傅里叶变换算法、下 作者&#xff1a;July、dznlong 二零一一年二月二十二日 推荐阅读&#xff1a;The Scientist and Engineers Guide to Digital Signal Processing&#xff0c;By Steven W. Smith, Ph.D。此书地址&#…

调出sharepoint错误的详细页面

记录一个小技巧&#xff1a; 在开发sharepoint的时候经常出现" An unexpected error has occurred."的页面&#xff0c;让人非常的郁闷。 打开web.config, 找到&#xff1a; <SafeMode MaxControls"200" CallStack"false" DirectFileDepende…

UVA 12298——Super Poker II

题意&#xff1a; 给定一些扑克牌&#xff0c;问这些扑克牌选四色能组成n的方案数&#xff0c;其中遗失了c张牌&#xff0c;这c张不能用&#xff0c;问n从a到b的方案数。 思路&#xff1a; 分析每一种花色&#xff0c;那么每种花色组成的方案数即为x^1x^2x^3x^5&#xff08;…

ERP词汇

我是一个很挑剔的人&#xff0c;当然是对自己&#xff0c;也对我的程序&#xff0c;我喜欢让自己的程序尽可能的完美&#xff0c;当然也包括了命名。 我很重视命名的规范性&#xff0c;也更喜欢别人去遵守共同的命名规范&#xff0c;这样的代码是自解释的&#xff0c;我可以不用…

2016CCPC网络赛赛后总结——回顾与反思

今天的比赛是特别遗憾的一场&#xff0c;如果能多出一题&#xff0c;或许是一个相反的场面&#xff0c;但是&#xff0c;实力就到这里了&#xff0c;瓶颈了&#xff0c;再假设如果毫无意义&#xff0c;一切都是我们平时不严格的训练和懈怠自己造成的&#xff0c;或许说起来难听…

Visual Studio Team System 2008 Team Suite 简体中文正式版

http://www.microsoft.com/downloads/details.aspx?displaylangzh-cn&FamilyIDd95598d7-aa6e-4f24-82e3-81570c5384cb#filelist 这是什么&#xff1f;*** 转载于:https://www.cnblogs.com/zxsoft/archive/2008/02/17/1071038.html

HDU 5832——A water problem 2016CCPC网络赛1001

题意&#xff1a; 给定一个数&#xff0c;问该数是否能够对10001取摸&#xff0c;能够就YES&#xff0c;否则为NO。 思路&#xff1a; 和题目样&#xff0c;水题&#xff0c;直接取摸即可。 code&#xff1a; #include <bits/stdc.h> using namespace std;char s[10…

职业生涯中12个最致命的想法

1、总觉得自己不够好  这种人虽然聪明、有历练&#xff0c;但是一旦被提拔&#xff0c;反而毫无自信&#xff0c;觉得自己不胜任。4、无条件地回避冲突  这种人一般会不惜一切代价&#xff0c;避免冲突。一位本来应当为部属据理力争的主管&#xff0c;为了回避冲突&#xf…

ASP.NET刷新页面的六种方法

ASP.NET刷新页面的六种方法 第一&#xff1a; private void Button1_Click( object sender, System.EventArgs e ) { Response.Redirect( Request.Url.ToString( ) ); } 第二&#xff1a; private void Button2_Click( object sender, System.EventArgs e ) { Response.Wri…

HDU 5842—— Lweb and String CCPC 网络赛 1011

题意&#xff1a; 按字母出现的顺序编号&#xff0c;问最长上升子序列。 思路&#xff1a; 最长为26&#xff0c;出现一个新的字母就加上&#xff0c;答案为字母的种数&#xff0c;无聊的题目。 code&#xff1a; #include <cstdio> #include <cstring> #inc…

LA 3458——Bridge

题意&#xff1a; 建设一座大桥&#xff0c;在桥上建若干个塔&#xff0c;塔高为H&#xff0c;相邻两塔间的距离不能超过D&#xff0c;桥长度为B&#xff0c;线的总长度为L&#xff0c;桥之间的绳索为对称抛物线&#xff0c;问建最少塔的时候的线索的最下端的离地高度y 思路&…

虚拟机照样飞速跑Windows Server2008

今晚下Windows Server2008的镜像下下来了&#xff0c;装在VM上了。给它分配了1G的内存&#xff0c;运行&#xff0c;速度真不错&#xff0c;比现在用的开发的机器的速度要快许多。真爽哟&#xff01;本本是Dell D630,Intel Core2 双核 T7250,2G内存。装的Vista系统&#xff0c;…

20160818_周报日志之二

写在前面 发觉自己真的很欠揍唉&#xff0c;明明上个周立了flag一周要进行一次总结的&#xff0c;结果这个周因为打比赛给忘却了&#xff0c;然后只能今天补了&#xff0c;不要说这个周不干了&#xff0c;下个周重新开始&#xff0c;这是个态度问题&#xff0c;这个周拖延的人…