1 log4j.rootCategory=info, stdout , R0,E 2 log4j.logger.receivecommand=INFO,R 3 log4j.logger.sendcommand=INFO,R2 4 log4j.logger.rundata=INFO,R3 5 6 log4j.appender.stdout = org.apache.log4j.ConsoleAppender 7 log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 8 log4j.appender.stdout.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n 9 10 ##所有日志全记录在一下all.log中 11 log4j.appender.R0=org.apache.log4j.DailyRollingFileAppender 12 log4j.appender.R0.layout=org.apache.log4j.PatternLayout 13 log4j.appender.R0.layout.ConversionPattern=%-20d{yyyy-MM-dd HH\:mm\:ss} [%p](%F\:%L) - %m%n 14 log4j.appender.R0.DatePattern='.'yyyy-MM-dd
15 log4j.appender.R0.File=logs/all.log 16 17 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender 18 log4j.appender.R.layout=org.apache.log4j.PatternLayout 19 log4j.appender.R.layout.ConversionPattern=%-20d{yyyy-MM-dd HH\:mm\:ss} [%p](%F\:%L) - %m%n 20 log4j.appender.R.DatePattern='.'yyyy-MM-dd 21 log4j.appender.R.File=logs/receivecommand.log 22 23 log4j.appender.R2=org.apache.log4j.DailyRollingFileAppender 24 log4j.appender.R2.layout=org.apache.log4j.PatternLayout 25 log4j.appender.R2.layout.ConversionPattern=%-20d{yyyy-MM-dd HH\:mm\:ss} [%p](%F\:%L) - %m%n 26 log4j.appender.R2.DatePattern='.'yyyy-MM-dd 27 log4j.appender.R2.File=logs/sendcommand.log 28 29 log4j.appender.R3=org.apache.log4j.DailyRollingFileAppender 30 log4j.appender.R3.layout=org.apache.log4j.PatternLayout 31 log4j.appender.R3.layout.ConversionPattern=%-20d{yyyy-MM-dd HH\:mm\:ss} [%p](%F\:%L) - %m%n 32 log4j.appender.R3.DatePattern='.'yyyy-MM-dd 33 log4j.appender.R3.File=logs/rundata.log 34 35 ##只输出ERROR以上的日志到error.log中 36 log4j.appender.E=org.apache.log4j.DailyRollingFileAppender 37 log4j.appender.E.layout=org.apache.log4j.PatternLayout 38 log4j.appender.E.layout.ConversionPattern=%-20d{yyyy-MM-dd HH\:mm\:ss} [%p](%F\:%L) - %m%n 39 log4j.appender.E.DatePattern='.'yyyy-MM-dd 40 log4j.appender.E.File=logs/error.log 41 log4j.appender.E.Append = true 42 log4j.appender.E.Threshold = ERROR
贴上我的测试代码:
1 package test; 2 3 import java.util.Calendar; 4 5 import org.apache.log4j.Logger; 6 7 /** 8 * @author shajp(shajp@163.com) 9 * @version 创建时间: 2012-08-08 14:43:45 10 * 使用log4j示例 11 */ 12 public class TestLog { 13 14 private static final Logger log = Logger.getLogger(TestLog.class); 15 16 public static void main(String[] args) { 17 log.info("start"); 18 TmyThread myThread = new TmyThread(); 19 myThread.start(); 20 } 21 22 } 23 24 class TmyThread extends Thread { 25 private static final Logger log = Logger.getLogger("sendcommand");//其日志会被记录到all.log、sendcommand.log。错误日志另外还记入error.log 26 private long lasttime; 27 28 public TmyThread() { 29 lasttime = Calendar.getInstance().getTimeInMillis(); 30 } 31 32 public void run() { 33 while (true) { 34 if (Calendar.getInstance().getTimeInMillis() - lasttime > 1000) { 35 log.info("发送数据:" + "qqqqqqqqqqqqq"); 36 log.error("err"+ Calendar.getInstance().getTimeInMillis()); 37 lasttime = Calendar.getInstance().getTimeInMillis(); 38 } 39 else { 40 try { 41 sleep(100); 42 } catch (Exception e) { 43 } 44 } 45 } 46 } 47 }
后面是转载:http://www.blogjava.net/zJun/archive/2006/06/28/55511.html
Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。
1. 配置文件
Log4J配置文件的基本格式如下:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
其中 [level] 是日志输出级别,共有5级:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
Appender 为日志输出目的地,Log4j提供的appender有以下几种:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
Layout:日志输出格式,Log4j提供的layout有以下几种:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
2. 在代码中初始化Logger:
1)在程序中调用BasicConfigurator.configure()方法:给根记录器增加一个ConsoleAppender,输出格式通过PatternLayout设为"%-4r [%t] %-5p %c %x - %m%n",还有根记录器的默认级别是Level.DEBUG.
2)配置放在文件里,通过命令行参数传递文件名字,通过PropertyConfigurator.configure(args[x])解析并配置;
3)配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;
4)配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。
3. 为不同的 Appender 设置日志输出级别:
当调试系统时,我们往往注意的只是异常级别的日志输出,但是通常所有级别的输出都是放在一个文件里的,如果日志输出的级别是BUG!?那就慢慢去找吧。
这时我们也许会想要是能把异常信息单独输出到一个文件里该多好啊。当然可以,Log4j已经提供了这样的功能,我们只需要在配置中修改Appender的Threshold 就能实现,比如下面的例子:
[配置文件]
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
[代码中使用]
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/8f1ba5b45633e9678d1db480c16cae3f.gif)
运行一下,看看异常信息是不是保存在了一个单独的文件error.log中。