- 浏览: 189975 次
- 性别:
- 来自: 上海
文章分类
最新评论
一、介绍
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。
二、配置文件
其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties格式的文件。下面我们介绍使用properties格式做为配置文件的方法:
示例:
log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
1. 配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
2. 配置日志信息输出目的地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(将日志信息以流格式发送到任意指定的地方)
(1).ConsoleAppender选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台
(2).FileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
(3).DailyRollingFileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
DatePattern=’.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
1)’.'yyyy-MM: 每月
2)’.'yyyy-ww: 每周
3)’.'yyyy-MM-dd: 每天
4)’.'yyyy-MM-dd-a: 每天两次
5)’.'yyyy-MM-dd-HH: 每小时
6)’.'yyyy-MM-dd-HH-mm: 每分钟
(4).RollingFileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
3. 配置日志信息的布局,其语法为:
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(包含日志产生的时间、线程、类别等等信息)
4、输出格式设置
在配置文件中可以通过log4j.appender.A1.layout.ConversionPattern设置日志输出格式。
参数:
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个”%”字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,Windows平台为”\r\n”,Unix平台为”\n”输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
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字符,就从左边交远销出的字符截掉。
三、在程序中的使用
在程序中使用Log4j之前,首先要将commons-logging.jar和logging-log4j-1.2.9.jar导入到classpath中,并将log4j.properties放于src根目录中。接下来就可以使用了。
1.得到记录器
使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:
public static Logger getLogger( String name),
通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ;
注:推荐使用commons-logging结合log4j进行日志记录
private static Log logger = LogFactory.getLog(Yourclass.class);
2.插入记录信息(格式化日志信息)
当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;
四、Log4j比较全面的配置
LOG4J的配置之简单使它遍及于越来越多的应用中了:Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了。
Java代码 收藏代码
log4j.rootLogger=DEBUG,CONSOLE,A1,im
log4j.addivity.org.apache=true
# 应用于控制台
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.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread] n%c[CATEGORY]%n%m[MESSAGE]%n%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
# Use this layout for LogFactor 5 analysis
# 应用于文件回滚
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用变量${java.home}、rolling.log
log4j.appender.ROLLING_FILE.Append=true //true:添加 false:覆盖
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
#应用于socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
# 发送日志给邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 用于数据库
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES (’[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n’)
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH’.log4j’
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
#自定义Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
------------------------------------------------------------------------------
Log4j高级配置
使用log4j日志文件时,我们需将两个必须的包放入lib目录下:log4j.XX.jar和commons-logging.XX.jar;
然后在classpath目录下(IDE中即为项目下的src目录下)新建一个日志文件,统一命名为:log4j.properties;
1.需求一:存储数据库
a. 首先在数据库中建一个用来存储日志的数据库命名为operate_log;字段如下:
b.数据库成功建立后,就可以去配置日志文件log4j.properties,代码如下:
[plain] view plaincopy
log4j.rootLogger=INFO,db
########################
# JDBC Appender
#######################
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.db.BufferSize=1
log4j.appender.db.driver=net.sourceforge.jtds.jdbc.Driver
log4j.appender.db.URL=jdbc:jtds:sqlserver://localhost:1433;DatabaseName=xxx
log4j.appender.db.user=sa
log4j.appender.db.password=123
log4j.appender.db.sql=insertinto operate_log(class,method,createtime,loglevel,logmsg,user_id,user_type) values('%C','%M','%d{yyyy-MM-dd HH\:mm\:ss}','%p','%m','1',1)
log4j.appender.db.layout=org.apache.log4j.PatternLayout
上面的配置就是最精简的将日志内容直接存储进入数据库
下面来稍微解释:
log4j.rootLogger=INFO,db语法为:
log4j.rootLogger = [ level ] ,appenderName1, appenderName2, …
level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、##WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志##信息将不被打印出来。
appenderName:就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
例如:log4j.rootLogger=info,A1,B2,C3配置了3个输出地方,这个名字可以任意(如上面的db),但必须与我们在后面进行的设置名字对应;
然后下面就是进行数据库连接的配置,log4j是使用jdbc进行连接的,该封转的类就是log4j包下的org.apache.log4j.jdbc.JDBCAppender,大家对jdbc了解的话上面的内容应该是很简单的;
这里要注意的就是:1.记得把数据库连接的相关包放到lib目录下,2.在写连接数据库的信息时如user等注意后面不要有空格,否则就不能连上数据库
c.日志文件配置完成后,我们就可以进行测试了,写一个类:
[java] view plaincopy
package xidian.sl.action.admin;
import org.apache.log4j.Logger;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport{
private static final Logger log = Logger.getLogger(HelloWorld.class);//日志文件
public static void main(String[] args) {
log.error("访问了HelloWorld");
log.warn("访问了HelloWorld");
log.info("访问了HelloWorld");
log.debug("访问了HelloWorld");
}
}
然后右键运行,如果没有报错的话应该是成功了,可以去数据库看看:
可以看到日志信息已经进行了存储,但发现只有三条,少了debug,对了,由于我们进行了日志优先级的配置:log4j.rootLogger=INFO,db,只有debug级别就不能进行打印了;
到这里我们可以说基本成功了,但还远远不能满足我的需求:
我们发现数据库中出现了很多的日志信息,这个日志信息应该是启动等,从系统文件(spring等)中打印的,但这个其实不是我们需要的,或者说我们需要将其分开:
我们重新进行日志文件的配置log4j.properties
[plain] view plaincopy
log4j.logger.xidian=INFO,db
log4j.logger.org=WARN, A1
log4j.logger.com =WARN, A2
#A1
log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.File=${webapp.root}/WEB-INF/logs/org.log
log4j.appender.A1.MaxFileSize=500KB
log4j.appender.A1.MaxBackupIndex=50
log4j.appender.A1.Append=true
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss} - [%p] [%C{1}] - %m%n
#A2
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=${webapp.root}/WEB-INF/logs/com.log
log4j.appender.A2.MaxFileSize=500KB
log4j.appender.A2.MaxBackupIndex=50
log4j.appender.A2.Append=true
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss} - [%p] [%C{1}] - %m%n
这次的配置要复杂点
[plain] view plaincopy
log4j.logger.xidian=INFO,db
log4j.logger.org=WARN, A1
log4j.logger.com =WARN, A2
这个配置就是将不同的包下的信息输出到不同的文件中,根据下面的配置可知以xidian开头的包下的java文件的日志信息时进行数据库存储的,而org与com包开头的日志信息是输出到文件中,文件的输出地址是${webapp.root}/WEB-INF/logs/org.log即项目的WEB-INF目录下的logs文件夹中,为了得到${webapp.root}我们还需要到web.xml文件中进行配置:
[html] view plaincopy
<!--由Sprng载入的Log4j配置文件位置-->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<!--Spring log4j Config listener-->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
这样我们再次运行HelloWorld程序
查看数据库:
然后在到WEB-INF目录下的logs文件夹中查看输出的日志文件:
由于我们在根Logger下也进行了配置:这个根Logger的配置是对所有日志操作都是有作用的
[plain] view plaincopy
log4j.rootLogger=INFO,stdout
#stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d%5p (%c\:%L) - %m%n
这个配置是进行控制台的输出,因此我们在控制台中也会发现有输出:
2.需求二:提取用户信息
到此为止我们日志的基本操作都应该掌握了,但我还有一个需求没有满足,就是我一开始数据库字段的设计中还包含了两个字段:
这两个字段是存储用户的id和用户类型的,以便我们在后面日志的核查中能正确的找出用户信息;但这里就有一个问题了我们就靠上面的操作还是不能将用户信息得到的,
还有log4j的设计者已经为我们想到了,log4j为我们提供了MDC(MDC是log4j种非常有用类,它们用于存储应用程序的上下文信息(contextinfomation),从而便于在log中使用这些上下文信息。MDC内部使用了类似map的机制来存储信息,上下文信息也是每个线程独立地储存,所不同的是信息都是以它们的key值存储在”map”中。相对应的方法,
MDC.put(key, value);
MDC.remove(key);
MDC.get(key);
在配置PatternLayout的时候使用:%x{key}来输出对应的value。
思路:我们就可以利用过滤器来得到登录用户的信息,然后将其存储到MDC中,然后再在log4j.properties配置文件中的sql语句中进行读取:
过滤器代码:
[java] view plaincopy
package xidian.sl.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.log4j.MDC;
public class LogResFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException,ServletException {
//用户的id
Integer userId =(Integer)session.getAttribute("userId");
//用户的类型
String adminType =(String)session.getAttribute("adminType");
MDC.put("userId", userId);
MDC.put("userType",adminType);
chain.doFilter(request, response);
}
}
然后在web.xml中进行过滤器的配置:
[html] view plaincopy
<filter>
<filter-name>LogResFilter</filter-name>
<filter-class>xidian.sl.filter.LogResFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LogResFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
这样用户登录后存储在session中的信息通过该过滤器就存储MDC中,然后我们在日志文件中写sql语句:
[plain] view plaincopy
log4j.appender.db.sql=insertinto operate_log(class,method,createtime,loglevel,logmsg,user_id,user_type) values('%C','%M','%d{yyyy-MM-dd HH\:mm\:ss}','%p','%m','%X{userId}','%X{adminType}')
以上部分来自于http://blog.csdn.net/robinsone/article/details/43732521
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。
二、配置文件
其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties格式的文件。下面我们介绍使用properties格式做为配置文件的方法:
示例:
log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
1. 配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
2. 配置日志信息输出目的地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(将日志信息以流格式发送到任意指定的地方)
(1).ConsoleAppender选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台
(2).FileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
(3).DailyRollingFileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
DatePattern=’.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
1)’.'yyyy-MM: 每月
2)’.'yyyy-ww: 每周
3)’.'yyyy-MM-dd: 每天
4)’.'yyyy-MM-dd-a: 每天两次
5)’.'yyyy-MM-dd-HH: 每小时
6)’.'yyyy-MM-dd-HH-mm: 每分钟
(4).RollingFileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
3. 配置日志信息的布局,其语法为:
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(包含日志产生的时间、线程、类别等等信息)
4、输出格式设置
在配置文件中可以通过log4j.appender.A1.layout.ConversionPattern设置日志输出格式。
参数:
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个”%”字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,Windows平台为”\r\n”,Unix平台为”\n”输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
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字符,就从左边交远销出的字符截掉。
三、在程序中的使用
在程序中使用Log4j之前,首先要将commons-logging.jar和logging-log4j-1.2.9.jar导入到classpath中,并将log4j.properties放于src根目录中。接下来就可以使用了。
1.得到记录器
使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:
public static Logger getLogger( String name),
通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ;
注:推荐使用commons-logging结合log4j进行日志记录
private static Log logger = LogFactory.getLog(Yourclass.class);
2.插入记录信息(格式化日志信息)
当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;
四、Log4j比较全面的配置
LOG4J的配置之简单使它遍及于越来越多的应用中了:Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了。
Java代码 收藏代码
log4j.rootLogger=DEBUG,CONSOLE,A1,im
log4j.addivity.org.apache=true
# 应用于控制台
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.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread] n%c[CATEGORY]%n%m[MESSAGE]%n%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
# Use this layout for LogFactor 5 analysis
# 应用于文件回滚
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用变量${java.home}、rolling.log
log4j.appender.ROLLING_FILE.Append=true //true:添加 false:覆盖
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
#应用于socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
# 发送日志给邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 用于数据库
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES (’[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n’)
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH’.log4j’
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
#自定义Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
------------------------------------------------------------------------------
Log4j高级配置
使用log4j日志文件时,我们需将两个必须的包放入lib目录下:log4j.XX.jar和commons-logging.XX.jar;
然后在classpath目录下(IDE中即为项目下的src目录下)新建一个日志文件,统一命名为:log4j.properties;
1.需求一:存储数据库
a. 首先在数据库中建一个用来存储日志的数据库命名为operate_log;字段如下:
b.数据库成功建立后,就可以去配置日志文件log4j.properties,代码如下:
[plain] view plaincopy
log4j.rootLogger=INFO,db
########################
# JDBC Appender
#######################
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.db.BufferSize=1
log4j.appender.db.driver=net.sourceforge.jtds.jdbc.Driver
log4j.appender.db.URL=jdbc:jtds:sqlserver://localhost:1433;DatabaseName=xxx
log4j.appender.db.user=sa
log4j.appender.db.password=123
log4j.appender.db.sql=insertinto operate_log(class,method,createtime,loglevel,logmsg,user_id,user_type) values('%C','%M','%d{yyyy-MM-dd HH\:mm\:ss}','%p','%m','1',1)
log4j.appender.db.layout=org.apache.log4j.PatternLayout
上面的配置就是最精简的将日志内容直接存储进入数据库
下面来稍微解释:
log4j.rootLogger=INFO,db语法为:
log4j.rootLogger = [ level ] ,appenderName1, appenderName2, …
level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、##WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志##信息将不被打印出来。
appenderName:就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
例如:log4j.rootLogger=info,A1,B2,C3配置了3个输出地方,这个名字可以任意(如上面的db),但必须与我们在后面进行的设置名字对应;
然后下面就是进行数据库连接的配置,log4j是使用jdbc进行连接的,该封转的类就是log4j包下的org.apache.log4j.jdbc.JDBCAppender,大家对jdbc了解的话上面的内容应该是很简单的;
这里要注意的就是:1.记得把数据库连接的相关包放到lib目录下,2.在写连接数据库的信息时如user等注意后面不要有空格,否则就不能连上数据库
c.日志文件配置完成后,我们就可以进行测试了,写一个类:
[java] view plaincopy
package xidian.sl.action.admin;
import org.apache.log4j.Logger;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport{
private static final Logger log = Logger.getLogger(HelloWorld.class);//日志文件
public static void main(String[] args) {
log.error("访问了HelloWorld");
log.warn("访问了HelloWorld");
log.info("访问了HelloWorld");
log.debug("访问了HelloWorld");
}
}
然后右键运行,如果没有报错的话应该是成功了,可以去数据库看看:
可以看到日志信息已经进行了存储,但发现只有三条,少了debug,对了,由于我们进行了日志优先级的配置:log4j.rootLogger=INFO,db,只有debug级别就不能进行打印了;
到这里我们可以说基本成功了,但还远远不能满足我的需求:
我们发现数据库中出现了很多的日志信息,这个日志信息应该是启动等,从系统文件(spring等)中打印的,但这个其实不是我们需要的,或者说我们需要将其分开:
我们重新进行日志文件的配置log4j.properties
[plain] view plaincopy
log4j.logger.xidian=INFO,db
log4j.logger.org=WARN, A1
log4j.logger.com =WARN, A2
#A1
log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.File=${webapp.root}/WEB-INF/logs/org.log
log4j.appender.A1.MaxFileSize=500KB
log4j.appender.A1.MaxBackupIndex=50
log4j.appender.A1.Append=true
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss} - [%p] [%C{1}] - %m%n
#A2
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=${webapp.root}/WEB-INF/logs/com.log
log4j.appender.A2.MaxFileSize=500KB
log4j.appender.A2.MaxBackupIndex=50
log4j.appender.A2.Append=true
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss} - [%p] [%C{1}] - %m%n
这次的配置要复杂点
[plain] view plaincopy
log4j.logger.xidian=INFO,db
log4j.logger.org=WARN, A1
log4j.logger.com =WARN, A2
这个配置就是将不同的包下的信息输出到不同的文件中,根据下面的配置可知以xidian开头的包下的java文件的日志信息时进行数据库存储的,而org与com包开头的日志信息是输出到文件中,文件的输出地址是${webapp.root}/WEB-INF/logs/org.log即项目的WEB-INF目录下的logs文件夹中,为了得到${webapp.root}我们还需要到web.xml文件中进行配置:
[html] view plaincopy
<!--由Sprng载入的Log4j配置文件位置-->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<!--Spring log4j Config listener-->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
这样我们再次运行HelloWorld程序
查看数据库:
然后在到WEB-INF目录下的logs文件夹中查看输出的日志文件:
由于我们在根Logger下也进行了配置:这个根Logger的配置是对所有日志操作都是有作用的
[plain] view plaincopy
log4j.rootLogger=INFO,stdout
#stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d%5p (%c\:%L) - %m%n
这个配置是进行控制台的输出,因此我们在控制台中也会发现有输出:
2.需求二:提取用户信息
到此为止我们日志的基本操作都应该掌握了,但我还有一个需求没有满足,就是我一开始数据库字段的设计中还包含了两个字段:
这两个字段是存储用户的id和用户类型的,以便我们在后面日志的核查中能正确的找出用户信息;但这里就有一个问题了我们就靠上面的操作还是不能将用户信息得到的,
还有log4j的设计者已经为我们想到了,log4j为我们提供了MDC(MDC是log4j种非常有用类,它们用于存储应用程序的上下文信息(contextinfomation),从而便于在log中使用这些上下文信息。MDC内部使用了类似map的机制来存储信息,上下文信息也是每个线程独立地储存,所不同的是信息都是以它们的key值存储在”map”中。相对应的方法,
MDC.put(key, value);
MDC.remove(key);
MDC.get(key);
在配置PatternLayout的时候使用:%x{key}来输出对应的value。
思路:我们就可以利用过滤器来得到登录用户的信息,然后将其存储到MDC中,然后再在log4j.properties配置文件中的sql语句中进行读取:
过滤器代码:
[java] view plaincopy
package xidian.sl.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.log4j.MDC;
public class LogResFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException,ServletException {
//用户的id
Integer userId =(Integer)session.getAttribute("userId");
//用户的类型
String adminType =(String)session.getAttribute("adminType");
MDC.put("userId", userId);
MDC.put("userType",adminType);
chain.doFilter(request, response);
}
}
然后在web.xml中进行过滤器的配置:
[html] view plaincopy
<filter>
<filter-name>LogResFilter</filter-name>
<filter-class>xidian.sl.filter.LogResFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LogResFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
这样用户登录后存储在session中的信息通过该过滤器就存储MDC中,然后我们在日志文件中写sql语句:
[plain] view plaincopy
log4j.appender.db.sql=insertinto operate_log(class,method,createtime,loglevel,logmsg,user_id,user_type) values('%C','%M','%d{yyyy-MM-dd HH\:mm\:ss}','%p','%m','%X{userId}','%X{adminType}')
以上部分来自于http://blog.csdn.net/robinsone/article/details/43732521
发表评论
文章已被作者锁定,不允许评论。
-
redis 客户端 jedis
2016-11-09 15:36 509 -
高效序列化工具kryo
2016-11-09 15:29 553 -
Jetty项目简介
2016-11-07 11:28 446jetty是一个开源、基于标准、全功能实现的Java服务器。它 ... -
Quartz 表达式
2016-08-26 15:13 383Quartz中时间表达式的设 ... -
org.apache.commons.dbutils
2016-08-26 11:20 359 -
org.quartz
2016-08-26 10:16 531 -
jedis
2016-08-24 18:08 458 -
待查看
2016-08-02 09:41 4061tair 2 tddl 3hsf 4 分库分表 pmd ... -
Notify、MetaQ、Kafka、ActiveMQ
2016-07-03 12:15 7911 Notify Notify是淘宝自主研发的一套消息服务引 ... -
Reactor、Disruptor
2016-04-27 12:55 1079Reactor 主要用于帮助开发者创建基于JVM的异步应用程序 ... -
redis学习(java调用方式)
2016-04-07 17:56 488【redis数据结构 – 简介 ... -
SonarQube代码质量管理平台安装与使用
2016-03-21 16:13 513代码质量管理工具 http://blog.csdn.net/h ... -
cat监控
2016-03-16 15:22 485 -
durid 数据库连接池
2016-03-15 09:35 1032Druid是Java语言中最好的数据库连接池。Druid能够提 ... -
dubbo 与zookeeper
2016-01-15 09:53 830详见 http://dubbo.io/ http:/ ... -
[Google Guava]
2015-11-25 14:32 6332.3-强大的集合工具类: ... -
跨数据库事务研究
2015-05-12 11:16 871两种方案: 1、分布式 ... -
httpClient 研究
2015-04-19 19:35 485虽然JDK 的 java.net 包中 ... -
dom4j 及其比较
2015-04-19 18:46 6501:DOM DOM 是用与平台和语言无关的方式表示 X ... -
quartz 深入
2015-04-19 16:07 704Quartz 是 OpenSymphony 开源组织在任务调度 ...
相关推荐
这个“log4j示例项目”旨在帮助开发者理解和使用Log4j,通过该项目,我们可以深入学习Log4j的配置、使用方法以及其在实际开发中的应用。 **1. Log4j的组成部分** Log4j主要包括三个核心组件:Logger(日志器)、...
深入研究Log4j 1.2.16的源代码,你可以了解到如何实现日志事件的线程安全处理,以及如何优化日志性能,比如通过缓存日志输出格式来减少不必要的字符串连接操作。此外,源码中还包含了一些关键的类,如Category...
然而,在2021年12月初,研究人员发现Log4j2的一个严重漏洞,允许攻击者通过注入JNDI(Java Naming and Directory Interface)链接来执行任意代码。由于Log4j2被广泛应用在各种软件和系统中,这个漏洞的影响范围非常...
通过对Log4j 2.11.0源码的深入研究,开发者不仅可以掌握其基本用法,还能了解其背后的实现机制,从而更好地利用这一强大的工具,提升开发效率,优化系统性能。同时,源码学习也是提升编程技能的重要途径,能帮助...
《深入理解Log4j2 RCE漏洞:从概念到实战》 在信息技术领域,安全问题始终是关注的焦点。本文将深入探讨一个重要的安全漏洞——Log4j2远程代码执行(RCE)漏洞,该漏洞曾引起全球广泛关注。我们将从项目标题"Log4j2...
通过研究源码,我们可以了解Log4j是如何实现日志的高效管理和定制化,同时也可以借鉴其设计思想,应用到自己的项目中。 对于"org"这个文件夹,通常在Java项目中,它代表的是组织或者项目的根包名。在Log4j的源码中...
在提供的"Log4j2 demo (log4j2 version 2.1)"工程中,你可以深入了解如何配置和使用Log4j2进行日志记录。通过研究代码和配置文件,你将能够掌握如何创建Logger、配置Appender、定义Layout,以及如何利用过滤器和...
深入研究“apache-log4j-2.0-rc1-src”源码,你可以学习到如何设计一个高性能的日志系统,理解其内部的事件处理机制,以及如何实现自定义的日志处理器和过滤器。这对于Java开发者来说,无论是优化现有应用的日志性能...
在log4j 1.2.15源码中,我们可以深入研究这些核心组件的实现细节,例如Logger是如何根据配置文件进行初始化的,Appender是如何实现日志输出的,以及Level是如何影响日志过滤的。通过对这些关键部分的分析,开发者...
通过深入研究Apache Log4j 2.10.0的源码,开发者不仅可以了解日志框架的内部工作原理,还能学习到设计一个高性能、可扩展的日志系统的最佳实践。这有助于在实际开发中更好地利用Log4j 2的功能,解决日志管理中的各种...
**日志管理在软件开发中扮演着至关重要的角色,它能帮助开发者跟踪程序运行状态、定位错误和故障,以及优化性能。...通过深入研究提供的帮助文档和实例,你可以进一步巩固Log4j的知识,并将其运用到自己的项目中。
**log4j简介** log4j是Apache组织提供的一款开源的日志记录框架,广泛应用于Java应用程序中,用于记录程序运行...通过深入研究这些文件,开发者可以掌握如何在自己的Java应用中有效地利用log4j进行日志管理和调试。
Log4J是Apache组织开发的一款Java日志记录框架,它为Java应用程序提供了强大的日志处理能力。在1.2.14版本中,这个库包含了丰富的...通过深入研究提供的资源,你将能够熟练掌握其使用,并将其有效地应用到实际开发中。
**正文** 《深入理解log4j:文档与实践》 在Java编程中,日志记录是不可或缺的一部分,它有助于开发者追踪程序运行...通过阅读文档、研究源码、实践编写代码,我们可以更好地利用Log4j来提升软件的可维护性和稳定性。
《深入理解Log4j——基于...这份资料"Log4j.pdf"应该包含更多关于Log4j的详细信息,如其设计理念、核心组件的实现、配置文件解析以及常见问题的解决方案,对于想要深入研究Log4j的开发者来说,是一份宝贵的参考资料。
- `PatternLayout`类:深入研究日志格式化的实现。 - `Category`(Logger的旧名称)和`Priority`(Level的旧名称)类:了解旧版本的API。 6. **源码修改** 提到源码已“修改”,这可能包括自定义日志格式、添加...
这个压缩包文件包含的是Log4j的官方源码,对于开发者来说,能够直接导入到Eclipse中进行学习和研究,或者进行二次开发,具有很高的价值。下面将详细解释Log4j的核心概念、功能以及如何在Eclipse中使用这些源码。 1....
Log4j还支持异步日志记录、日志过滤、自定义日志格式和自定义appender等功能,可以根据具体需求进行深入研究和应用。 综上所述,Log4j是Java开发中不可或缺的日志工具,其丰富的配置选项和强大的功能使得我们可以...
这个zip文件"apache-log4j-2.9.0-src.zip"包含了Log4j 2.9.0版本的源代码,允许开发者深入理解其内部工作原理,进行定制化开发或排查问题。 Log4j 2.9.0源码中包含以下几个核心知识点: 1. **配置文件解析**:Log4...
《深入解析log4j-1.2.15:源码与工具的融合》 在IT行业中,日志记录是软件开发中不可或缺的一部分,它帮助开发者追踪程序运行状态,定位和解决问题。Log4j,作为Java领域最常用的日志框架之一,因其高效、灵活和可...