由于本人的开发经验有限,能力有限,所以难免会有很多不足之处,所以希望大家可以一起交流学习!以前总是system.out.println();现在开发需要写日志了!所以就简单的学习了一下,log4j是最常用的一个日志记录apache的开源项目。这里我只简单的减少一下,同时会上传一些文档和demo,您需要的话可以自己下载来看看,其实很多文档都是差不多的。
1.为什么要用log4j;
开发一个系统的时候,总会System.out.println()来打印一些信息,但这些语句在系统稳定之后,就没有作用了,成了垃圾代码。Log4j就可以解决这个问题。
2.Log4j的处理过程
你可以使用Log4j来代替系统中输出语句,当你系统稳定之后,只要修改配置文件,就可以不显示打印信息了。
3 ,在应用系统的维护过程中,应用程序运行时所记录的日志对维护工作起着至关重要
的作用,应用日志常常可以让我们方便快速的定位到故障或BUG的所在。
4.无论是开源项目还是商业项目,LOG4J在事实上都成为了大多数程序员的选择,因
为其配置简单,使用方便,功能强大,能生成各种格式或各种类型的日志,并且可以将
日志写到文件、数据库、网络等目的地。
5.在对Logger实例进行命名时,没有限制,可以取任意自己感兴趣的名
字。一般情况下建议以类的所在位置来命名Logger实例,这是目前来讲比较有
效的Logger命名方式。这样可以使得每个类建立自己的日志信息,便于管理。
比如:
staticLoggerlogger= Logger.getLogger(ClientWithLog4j.class.getName());
6. Log4J对应用性能的影响
如果在程序运行中输出大量日志,显然会对应用的性能造成一定的影响。Log4J
对性能的影响取决于以下因素:
·日志输出目的地:输出到控制台的速度和输出到文件系统的速度是不一样
的。
·日志输出格式:格式简单,速度也更快。
·日志级别:日志级别设置的越低,输出的日志内容越多,对性能的影响也
越大。
7.
在应用程序中添加日志记录总的来说基于三个目的:
<1>.监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;
<2>.跟踪代码运行时轨迹,作为日后审计的依据;
<3>.担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
8. #将DAO层log 记录到DAOLog,allLog中
log4j.logger.DAO=DEBUG,A2,A4
#将逻辑层log记录到BusinessLog,allLog 中
log4j.logger.Businesslog=DEBUG,A3,A4
9. 任何logging API 与简单的System.out.println输出调试信息方法比较,最主要的优点在于它能够关闭一些调试信息输出而不影响其他人的调试。
**************************************************************************
1.只输出到控制台
#此属性指定日志等级,stdout为输出的目的地
log4j.rootCategory = info,stdout
#指定com.log.test.LogTest这个类可以输出debug级别的日志
log4j.logger.com.log.test.LogTest = Debug
#输出的目的地为控制台
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
#指定输出日志的布局类型
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
#日志的一些具体信息
log4j.appender.stdout.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
2.输出到文件中
#此属性指定日志等级,stdout,logfile为输出的目的地
log4j.rootCategory = info,logfile
#输出目的地类型为文件
log4j.appender.logfile=org.apache.log4j.FileAppender
#文件名为LogTest.log
log4j.appender.logfile.File=LogTest.log
#指定输出日志的布局类型
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
#日志的一些具体信息
log4j.appender.logfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
3.当日志文件大于100M时从新生成一个新的
#此属性指定日志等级,stdout,logfile为输出的目的地
log4j.rootCategory = info,logfile
#输出目的地类型为文件
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
#文件名为LogTest.log
log4j.appender.logfile.File=LogTest.log
log4j.appender.logfile.Append=true
#设置日志文件的最大存储量
log4j.appender.logfile.MaxFileSize=100MB
#指定输出日志的布局类型
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
#日志的一些具体信息
log4j.appender.logfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
4.每天生成一个日志文件
#此属性指定日志等级,stdout,logfile为输出的目的地
log4j.rootCategory = info,logfile
#输出目的地类型为文件
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
#文件名为LogTest.log
log4j.appender.logfile.File=LogTest.log
#指定输出日志的布局类型
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
#日志的一些具体信息
log4j.appender.logfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
*************************************************************************
在程序中怎么用的呢?~
1.你要导入两个jar包
2.在src中写一个配置文件,名字为:log4j.properties.
内容可以为上面四种情况的任意一种!你可以把日志输出控制台,或输出到文件中或者定义文件大小,是否每天产生一个新的日志文件等等。常用的也就这四种!具体的你可以根据文档自己搭配。我这里就不多说了!文档我会上传到下载里!名字:log4j-2012
3.具体程序中如何用的
package com.log.test;
import org.apache.log4j.Logger;
public class LogTest {
static Logger logger = Logger.getLogger(LogTest.class.getName());
public static void main(String[] args) {
//获取Logger实例,参数为本类
//Logger logger = Logger.getLogger(LogTest.class);
//输出一段DEBUG信息
logger.debug("2debuging");
//输出一段INFO信息
logger.info("info2....");
//输出一段ERROR信息
logger.error("error2....");
int a = 0;
try {
int b = 4/a;
} catch (Exception e) {
logger.debug("大哥,bbbbbbbbbbbbbb有bug啊");
}
}
}
这样你执行这个main方法就可以了!当然,若是在一个web project中,那你启动工程,该执行日志时就执行了!!
注意:也许你忘记了再java project中如何导入jar包的问题。见下图
good luck .. good good study ,day day up ...
#########################################################
2013-06-23-add-han-如果你想输入到控制台和文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
log4j.rootCategory = info,stdout,logfile,errorfile
log4j.logger.com.log.test.LogTest = Debug
log4j.logger.com.log.test.LogTest1 = Debug
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
#log4j.rootCategory = info,logfile,
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=D:/LogTest.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
#所有的错误信息输入到D:/ErrorLogTest.log中
log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorfile.File=D:/ErrorLogTest.log
log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorfile.Threshold=ERROR
log4j.appender.errorfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#log4j.rootLogger=trace, stdout,logfile,errorfile
#log4j.rootLogger=debug, stdout,logfile
log4j.rootLogger=info, stdout,logfile,errorfile
#1.console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.Threshold=info
#log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
log4j.appender.stdout.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
#2.file
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=${catalina.home}/logs/log.log
log4j.appender.logfile.Append=true
log4j.appender.logfile.Threshold = DEBUG
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
#3.errorfile
log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorfile.File=${catalina.home}/logs/logerror.log
log4j.appender.errorfile.DatePattern = '.'yyyy-MM-dd-HH-mm
log4j.appender.errorfile.Append=true
log4j.appender.errorfile.Threshold=ERROR
log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
package
com.book.web.controller;
import
org.apache.commons.logging.Log;
import
org.apache.commons.logging.LogFactory;
import
org.apache.log4j.Logger;
/**
* log4j1测试
* @author liweihan
* http://hanchaohan.blog.51cto.com/2996417/759111
*/
public
class
TestLog4j1Log {
/**
1.引入jar包
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.9</version>
</dependency>
2.在resources中加入log4j.properties文件。
Logger.getLogger(TestLog4j1Log.class)默认到类路径下加载log4j.properties配置文件
如果log4j.properties配置文件不在类路径下,则可以选择如下方式之一来加载配置文件
<1.>使用classLoader来加载资源
PropertyConfigurator.configure(Log4jTest.class.getClassLoader().getResource("properties/log4j.properties"));
<2.>使用log4j自带的Loader来加载资源
PropertyConfigurator.configure(Loader.getResource("properties/log4j.properties"));
3.如果要commons-logging和log4j一起使用,还需要引入jar包:
【https://my.oschina.net/pingpangkuangmo/blog/407895】
同时获取log的方式为:
private static Log logger = LogFactory.getLog(TestLog4j1Log.class);
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
4.log4j1和slf4j进行集成的话,还需要引入jar包
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
Logger logger=LoggerFactory.getLogger(TestLog4j1Log.class);
slf4j的Logger是slf4j定义的接口,而log4j的Logger是类。
LoggerFactory是slf4j自己的类
*/
private
static
final
Logger logger = Logger.getLogger(TestLog4j1Log.
class
);
public
static
void
main(String[] args) {
if
(logger.isDebugEnabled()) {
logger.debug(
" ====== log4j debug meassage"
);
}
if
(logger.isInfoEnabled()) {
logger.info(
" ====== log4j info message "
);
}
}
}
|
java自带的log日志
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package
com.book.web.controller;
import
java.util.logging.Logger;
/**
* jdk自带的logging
* @author liweihan
*
*/
public
class
TestJDKLog {
private
static
final
Logger logger = Logger.getLogger(TestJDKLog.
class
.getName());
/**
默认是jre目录下的lib/logging.properties文件,
*/
public
static
void
main(String[] args) {
logger.info(
" ====== jdk logging info : a msg"
);
}
}
|