打印日志是很重要的,可以从日志看出很多信息。
所以,
日志,
1.需要引入jar包
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.0</version>
</dependency>
2.配置
3.java调用
package soundsystem.thread;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class SleepThread {
Log log = LogFactory.getLog(SleepThread.class);
public static void main(String[] args) {
System.out.println("主线程 :" + Thread.currentThread().getName());
MyThread myThread = new SleepThread().new MyThread();
myThread.start();
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("主线程 :" + Thread.currentThread().getName() + "跑完");
}
class MyThread extends Thread {
@Override
public void run() {
System.out.println("子线程在跑 :" + Thread.currentThread().getName());
try {
Thread.currentThread().sleep(2000);
System.out.println("子线程业务完成 : " + Thread.currentThread().getName());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3.1配置详细解释
log4j.properties
log4j.rootLogger = debug,stdout,D
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/logs/xiaoqiang.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] - [ %l ] - [ %F ] - [ %L ] %m%n
## org.apache.log4j.ConsoleAppender 控制台 org.apache.log4j.DailyRollingFileAppender 一天创建一个文件
## Target 指定输出台 layout 输出表达式 ConversionPattern 具体表达式
## File 指定消息输出到文件 Append true消息增加到指定文件 false 覆盖
## Threshold 指定消息输出最低层次
## 日志信息符号格式含义
##
## %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)
## %%: 输出一个"%"字符
## %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字符,就从左边较远输出的字符截掉。
## 参考资料 参考资料:
${catalina.base}
Tomcat目 录结构如下:
bin (运行脚本) conf (配置文件) lib (核心库文件) logs (日志目录) temp (临时目录)
webapps (自动装载的应用程序的目录) work (JVM临时文件目录[java.io.tmpdir])
其中只有 bin 和 lib 目录被多个tomcat示例公用,其它目录conf、logs、temp、webapps和work 每个Tomcat实例必须拥有其自己独立的备份。
明白了上述关系就容易理解catalina.home和catalina.base的用途了:
catalina.home(安装目录):指向公用信息的位置,就是bin和lib的父目录。
catalina.base(工作目录):指向每个Tomcat目录私有信息的位置,就是conf、logs、temp、webapps和work的父目录。
仅运行一个Tomcat实例时,这两个属性指向的位置是相同的。
即:
### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ${catalina.base}/logs/app.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] - [ %l ] - [ %F ] - [ %L ] %m%n