打印日志是很重要的,可以从日志看出很多信息。

所以,

日志,

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.配置

java打印日志的时间和服务器不一致 java 日志打印的规则_java打印日志的时间和服务器不一致

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