- 浏览: 353322 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 18001.驼峰式命名: 1.1大驼峰式(帕斯卡Pascal)命名 ... -
Tomcat6优化
2013-01-06 14:27 6090http://shuhucy.iteye.com/blog/1 ... -
性能优化之代码
2013-01-06 14:25 13661、数据库编程中采用预编译(PreparedStatement ... -
iis Tomcat在处理GET和POST请求时产生的乱码问题
2012-10-24 22:24 1542有个朋友写JSP程序时,在Servlet中取请求参数时出现了乱 ... -
jackson反序列化时 对象包含空值
2012-10-19 10:20 7182org.codehaus.jackson.map.JsonMa ... -
com.jhlabs.image.RippleFilter.setXAmplitude
2012-10-12 15:45 6337com.jhlabs.image.RippleFilter.s ... -
servlet查询所有参数的两种方法
2012-08-03 15:12 1183// 1 StringBuffer allParameter ... -
java for map
2012-08-03 11:45 2160public static void main(Str ... -
struts2标签 什么时候用# 什么时候用%
2012-07-27 10:30 1351Struts2中有值堆栈和堆栈上下文的概念,你用 < ... -
计算两个日期相隔天数
2012-07-26 16:40 1310SimpleDateFormat dateFormat = n ... -
导出excel乱码
2012-07-18 16:36 1350out.clear(); response.res ... -
html转义
2012-07-03 08:52 1174------------------------------- ... -
Servlet 工作原理解析
2012-05-29 11:00 921http://www.ibm.com/developerwor ... -
基于按annotation的hibernate主键生成策略
2012-05-10 15:22 942http://xiaogui9317170.iteye.com ... -
springmvc拦截所有请求 不能访问jsp
2012-04-13 15:51 31550<servlet> ... -
java map for
2012-03-15 17:13 0for(String dataKey : paraMap ... -
tomcat中三种部署项目的方法
2012-03-14 14:48 1081tomcat中三种部署项目的方法 第一:在tomcat ... -
tomcat配置数据源
2012-03-14 14:48 1011<?xml version='1.0' encod ... -
删除svn文件
2012-03-09 15:04 863Windows Registry Editor Vers ... -
从Request对象中可以获取各种路径信息
2012-03-09 14:57 1409从Request对象中可以获取各种路径信息,以下例子: ...
相关推荐
### Log4j详解:日志记录的全面解析 #### 标题与描述解析: 标题“log4j详解(超详细)”与描述“log4j详解(超详细)”明确指出文章将对Log4j这一日志框架进行深入且详尽的介绍。Log4j作为一款流行的开源日志组件...
Log4j 详解 Log4j 是一款功能强大的日志记录工具,广泛应用于 Java 应用程序中。它可以帮助开发人员调试和分析程序,记录程序的运行情况,并提供了灵活的配置方式来控制日志的输出。 Log4j 的概念 Log4j 中有三个...
**Log4j详解与实战** Log4j是Java平台上的一个广泛应用的日志框架,由Apache软件基金会开发。它提供了一种灵活、强大的日志记录机制,使得开发者可以在应用程序中轻松地进行日志输出,便于调试、性能分析以及系统...
### Log4j详解 #### 1. Log4j简介 Log4j是Apache下的一个开源项目,用于实现灵活的日志管理。它可以帮助开发者控制日志信息的输出目的地、格式以及生成过程,这一切都可以通过简单的配置文件来实现,而无需修改...
Log4j详解
**日志框架Log4j详解** 日志框架在软件开发中扮演着至关重要的角色,它提供了记录应用程序运行过程中的各种信息的功能,便于调试、监控和问题排查。Log4j是Apache组织开发的一个开源日志记录工具,广泛应用于Java...
### Log4j详解:日志记录的精妙与配置解析 Log4j是Apache软件基金会下的一个开源项目,用于Java应用程序的日志记录。它提供了一种灵活、强大的日志记录框架,可以定制日志级别、格式和输出目标,极大地提高了应用的...
【log4j详解】 在Java开发中,日志记录是一个至关重要的部分,它帮助开发者监控程序行为、追踪错误和调试代码。Log4j是Apache软件基金会的一个开源项目,提供了强大的日志处理能力。本文将深入解析Log4j,探讨其...
### Log4j 详解与实战 #### 一、Log4j 概述 Log4j 是 Apache 的一个开源项目,它是由 Java 编写的一款功能强大的日志记录工具。Log4j 具备灵活的日志配置能力,允许开发者在运行时动态地控制日志输出的等级、格式...
### Log4j 配置详解 #### 一、概述 Log4j 是一款非常流行的 Java 日志框架,它提供了一种灵活的日志记录机制。在实际应用中,开发者可以通过简单的配置来实现对日志级别的控制、日志信息的格式化以及日志文件的...
Log4j 在 SSM 整合中的配置详解 Log4j 是一个功能强大且广泛使用的日志记录工具,特别是在 SSM(Spring、Spring MVC、Mybatis)整合项目中,合理地配置 Log4j 对项目的日志记录和输出至关重要。本文将详细介绍 SSM...
### Log4j详解 #### 输出级别的种类 在Log4j中,日志记录的信息可以根据不同的级别进行筛选。这些级别从高到低分别为:`FATAL`、`ERROR`、`WARN`、`INFO`、`DEBUG`。这些级别的定义如下: - **FATAL**:致命错误...
在“log4j详解”部分,我们首先会了解到Log4j的核心概念,包括Logger、Appender、Layout和Level。Logger是记录日志的对象,它可以设置不同的级别(如DEBUG、INFO、WARN、ERROR和FATAL),以便控制不同级别的信息输出...
**日志框架Log4j详解** 日志框架在软件开发中扮演着至关重要的角色,它提供了记录应用程序运行过程中的各种事件的功能,便于调试、监控和问题排查。Log4j是Apache组织开发的一个开源的日志记录工具,广泛应用于Java...