- 浏览: 347370 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
afreon:
解决java.lang.NoClassDefFoundErro ...
com.jhlabs.image.RippleFilter.setXAmplitude -
fanxianyun:
恶意代码,我添加了inputstream,但是我界面有个< ...
struts2 最新漏洞 S2-016、S2-017修补方案 -
s469799470:
...
struts2 if标签判断条件包含字符串的问题 -
chinahnzhou:
圣诞王子 写道chinahnzhou 写道圣诞王子 写道那我不 ...
springmvc拦截所有请求 不能访问jsp -
圣诞王子:
chinahnzhou 写道圣诞王子 写道那我不想直接输入 . ...
springmvc拦截所有请求 不能访问jsp
参考:
http://keepwork.iteye.com/blog/1511270
http://zhangkun716717-126-com.iteye.com/blog/1018176
http://spaceflysky-163-com.iteye.com/blog/249537
目录:
1.配置详解
2.自定义输出多个日志文件
3.高级使用
1.配置详解
日记记录的优先级由高到低分为 : OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。 Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这五个级别。 FATAL 为致命错误 ERROR 为严重错误 主要是程序的错误 WARN 为一般警告,比如session丢失 INFO 为一般要显示的信息,比如登录登出 DEBUG 为程序的调试信息
appender有以下几种: org.apache.log4j.ConsoleAppender(控制台) org.apache.log4j.FileAppender(文件) org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件) org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
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平台为“rn”,Unix平台为“n” %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 -x X信息输出时左对齐; %l 输出日志事件的发生位置,相当于%c.%m(%f:%l)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10) %x 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 %% 输出一个"%"字符 %f 输出日志消息产生时所在的文件名称 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如: 1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。 2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。 3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。 4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。
【示例1】输出为文本文件或HTML文件 log4j.rootLogger=debug, appender1, appender2 log4j.appender.appender1=org.apache.log4j.ConsoleAppender log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout log4j.appender.appender2=org.apache.log4j.FileAppender #log4j.appender.appender2.File=appender2.log log4j.appender.appender2.File=appender2.html #log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout
【示例2】自定义样式 log4j.rootLogger=debug,appender1 log4j.appender.appender1=org.apache.log4j.ConsoleAppender log4j.appender.appender1.layout=org.apache.log4j.PatternLayout log4j.appender.appender1.layout.ConversionPattern=%r [%t] [%p] - %c -%l -%m%n
【示例3】多目的地、自定义样式 log4j.rootLogger=debug,appender1,appender2 log4j.appender.appender1=org.apache.log4j.ConsoleAppender log4j.appender.appender1.layout=org.apache.log4j.PatternLayout log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n log4j.appender.appender2=org.apache.log4j.FileAppender log4j.appender.appender2.File=appender2.log log4j.appender.appender2.layout=org.apache.log4j.PatternLayout log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n
2.自定义输出多个日志文件
如果想对不同的类输出到不同的文件(以cn.com.Test为例),先要在Test.java中定义:
private static Log logger = LogFactory.getLog(Test.class);
然后在log4j.properties中加入:
log4j.logger.cn.com.Test=DEBUG, test log4j.appender.test=org.apache.log4j.FileAppender log4j.appender.test.File=test.log log4j.appender.test.layout=org.apache.log4j.PatternLayout log4j.appender.test.layout.ConversionPattern=%d %p [%c] - %m%n
但是,如果在同一类中需要输出多个日志文件呢?其实道理是一样的,先在Test.java中定义:
private static Log logger1 = LogFactory.getLog("myTest1"); private static Log logger2 = LogFactory.getLog("myTest2");
然后在log4j.properties中加入:
log4j.logger.myTest1=DEBUG, test1 log4j.appender.test1=org.apache.log4j.FileAppender log4j.appender.test1.File=test1.log log4j.appender.test1.layout=org.apache.log4j.PatternLayout log4j.appender.test1.layout.ConversionPattern=%d %p [%c] - %m%n log4j.logger.myTest2=DEBUG, test2 log4j.appender.test2=org.apache.log4j.FileAppender log4j.appender.test2.File=test2.log log4j.appender.test2.layout=org.apache.log4j.PatternLayout log4j.appender.test2.layout.ConversionPattern=%d %p [%c] - %m%n
还有一个问题,就是这些自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,如何能只让它们输出到自己指定的日志中呢?别急,这里有个开关:
log4j.additivity.myTest1=false
它用来设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方啦!注意这里的"myTest1"是你在程序中给logger起的那个自定义的名字!
如果你说,我只是不想同时输出这个日志到log4j.rootLogger所配置的logfile中,stdout里我还想同时输出呢!那也好办,把
log4j.logger.myTest1=DEBUG, test1 改为 log4j.logger.myTest1=DEBUG, test1, stdout
3.高级使用
3.1使用log4j1.2.14或以上版本
3.1 把Log4j压缩包里的NTEventLogAppender.dll拷到WINNT\SYSTEM32目录下
3.2 在项目中引用mail.jar和activation.jar
#log4j.properties #log4j.rootLogger=console, OS, mail #这一句设置以为着所有的log都输出 #如果为log4j.rootLogger=WARN, 则意味着只有WARN,ERROR,FATAL被输出,DEBUG,INFO将被屏蔽掉. #控制台输出 log4j.logger.consoleLog=DEBUG, console log4j.additivity.consoleLog=false #console appender log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n #在OS日志输出 log4j.logger.OSlog=FATAL, OS log4j.additivity.OSlog=false #OS appender log4j.appender.OS=org.apache.log4j.nt.NTEventLogAppender log4j.appender.OS.Source=JavaTest log4j.appender.OS.layout=org.apache.log4j.PatternLayout log4j.appender.OS.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n # 将日志发送到email log4j.logger.mailLog=WARN, mail log4j.additivity.mailLog=false #mail appender log4j.appender.mail=org.apache.log4j.net.SMTPAppender log4j.appender.mail.BufferSize=5 log4j.appender.mail.SMTPHost=smtp.163.com log4j.appender.mail.SMTPUsername=username@163.com log4j.appender.mail.SMTPPassword=password log4j.appender.mail.From=username@163.com log4j.appender.mail.To=to@163.com log4j.appender.mail.Subject=ErrorLog log4j.appender.mail.layout=org.apache.log4j.PatternLayout log4j.appender.mail.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
Log4jTest.java
public class Log4jTest { public static void main(String args[]) { PropertyConfigurator.configure("F:/log4j.properties"); // 在后台输出 Logger logger1 = Logger.getLogger("consoleLog"); logger1.debug("console_debug!!!"); logger1.info("console_info!!!"); logger1.warn("console_warn!!!"); logger1.error("console_error!!!"); logger1.fatal("console_fatal!!!"); // 在log写入系统日志 Logger logger2 = Logger.getLogger("OSlog"); logger2.debug("nt_debug!!!"); logger2.info("nt_info!!!"); logger2.warn("nt_warn!!!"); logger2.error("nt_error!!!"); // 只有这个错误才会写入2000日志 logger2.fatal("nt_fatal"); // 把log发送到mail Logger logger3 = Logger.getLogger("mailLog"); logger3.warn("mail_warn1!!!"); logger3.error("mail_error!!!"); logger3.error("mail_来两句中文!!!"); logger3.fatal("mail_fatal!!!"); } }
发表评论
-
java常用命名方式
2013-01-23 14:55 17311.驼峰式命名: 1.1大驼峰式(帕斯卡Pascal)命名 ... -
Tomcat6优化
2013-01-06 14:27 6060http://shuhucy.iteye.com/blog/1 ... -
性能优化之代码
2013-01-06 14:25 13351、数据库编程中采用预编译(PreparedStatement ... -
iis Tomcat在处理GET和POST请求时产生的乱码问题
2012-10-24 22:24 1503有个朋友写JSP程序时,在Servlet中取请求参数时出现了乱 ... -
jackson反序列化时 对象包含空值
2012-10-19 10:20 7115org.codehaus.jackson.map.JsonMa ... -
com.jhlabs.image.RippleFilter.setXAmplitude
2012-10-12 15:45 6199com.jhlabs.image.RippleFilter.s ... -
servlet查询所有参数的两种方法
2012-08-03 15:12 1137// 1 StringBuffer allParameter ... -
java for map
2012-08-03 11:45 2116public static void main(Str ... -
struts2标签 什么时候用# 什么时候用%
2012-07-27 10:30 1313Struts2中有值堆栈和堆栈上下文的概念,你用 < ... -
计算两个日期相隔天数
2012-07-26 16:40 1262SimpleDateFormat dateFormat = n ... -
导出excel乱码
2012-07-18 16:36 1309out.clear(); response.res ... -
html转义
2012-07-03 08:52 1137------------------------------- ... -
Servlet 工作原理解析
2012-05-29 11:00 873http://www.ibm.com/developerwor ... -
基于按annotation的hibernate主键生成策略
2012-05-10 15:22 898http://xiaogui9317170.iteye.com ... -
springmvc拦截所有请求 不能访问jsp
2012-04-13 15:51 31496<servlet> ... -
java map for
2012-03-15 17:13 0for(String dataKey : paraMap ... -
tomcat中三种部署项目的方法
2012-03-14 14:48 1041tomcat中三种部署项目的方法 第一:在tomcat ... -
tomcat配置数据源
2012-03-14 14:48 962<?xml version='1.0' encod ... -
删除svn文件
2012-03-09 15:04 813Windows Registry Editor Vers ... -
从Request对象中可以获取各种路径信息
2012-03-09 14:57 1367从Request对象中可以获取各种路径信息,以下例子: ...
相关推荐
log4j详解(超详细)
log4j详解.txtlog4j详解.txt
Log4j详解
Log4j详解,详细讲解log4j的使用,和原理
log4j详解.pdf
Log4j详解与实战.
log4j详解-信息输出到文件或控制台 log4j详解-信息输出到文件或控制台
log4j详解,log4j详细配置说明手册
log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解log4j使用详解
log4j详解与实战 log4j详解与实战 log4j详解与实战
log4j详解与实战、log4j 详解(二)
log4j详解.祝大家学习进步!
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是...
Log4j配置详解 特别清晰,大家可以下载来参考学习,有问题可以反馈
log4j详解***********************************
log4j详解与实战 - 企业应用 Logger - 日志写出器,供程序员输出日志信息 Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去 ConsoleAppender - 目的地为控制台的Appender FileAppender - 目的地...