log4j 日志配置

 

log4j 大概的配置方式可分为 2 种:

 

第一种: log4j.xml 配置

1、 导入架包 log4j-1.2.17.jar

        查看附件

2、 写 log4j.xml 的配置内容(部分示例)

 




    
	
	
	
	
	
		
			
		
		
		
			
			
			
		
	
	
	  
	
        
		
        
        
        
        
        
        
        
		
			
		
	
	
	
		
		
		
		
			
		
	
	
	
	
	
	
		
		
		
	
	
	
	
	
	
		
		
		
		
	
	

 

 

3、 web.xml 导入log4j.xml 配置

 

	 
	
	    log4jConfigLocation
		/WEB-INF/log4j.xml
	
	
	
		rootLevel
		DEBUG
	
	
		loggingLevel
		INFO
	
	
	
		org.springframework.web.util.Log4jConfigListener
	

 

 

4、 在需要写日志的类中实例化 log4j的日志类

 

@Controller
public class HelloController {

    protected Logger log = Logger.getLogger(HelloController.class);
//    protected Logger log = Logger.getLogger("com.lw.controller");
    
    @RequestMapping("index")
    public ModelAndView index() {
	log.info("===============进入 Index 方法");
	String str = "Hello World. 
This is page index"; return new ModelAndView("index", "str", str); }

 

 

 

第二种: log4j.properties 属性文件配置

1、导入架包(同上)

2、log4j.properties 属性配置

 

log4j.rootLogger=info, ServerDailyRollingFile, stdout

### 每天生产一个日志文件
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.ServerDailyRollingFile.DatePattern='-'yyyy-MM-dd'.log' 
log4j.appender.ServerDailyRollingFile.File=C:/logs/mylog.log 
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout 
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n 
log4j.appender.ServerDailyRollingFile.Append=true

### 输出控制台 appender
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n

 

 

3、web.xml 配置导入 log4j.properties属性文件、 代码中硬编码导入log4j.properties

 

      
        log4jConfigLocation  
       /WEB-INF/log4j.properties  
    

 或者

PropertyConfigurator.configure("log4j.properties"); 

// a). 代码中,PropertyConfigurator.configure("bin/log4j.properties"); 
// b). 代码中,PropertyConfigurator.configure(ClassLoader.getSystemResource("log4j.properties"));

log4j 日志配置_第1张图片
 

4、需要写日志的类中实例化日志类(同上)

 

相关问题及解决方案:

DailyRollingFileAppender(每天产生一个日志文件),  每天生成新文件的时候,  会调用一个 renameTo 的方法, 就是把日志文件改成当前日期对应的文件,  如: mylog.log > renameTo > mylog.log.2015-05-15.log时, 由于 mylog.log 已经打开,在window下是不允许重命名操作的, 所以会报错。 所以改用 复制文件的方式, 自定义copy方法, 代码如下:

原来用的是:

log4j 日志配置_第2张图片
 

修改以后是:

log4j 日志配置_第3张图片
 

    /**
     * Copies src file to dst file. If the dst file does not exist, it is
     * created.4KB cache
     * 日志文件拷贝好以后, 清空原文件的内容, 保证每次记录的只有当天的内容
     * 
     * @param src
     * @param dst
     * @throws IOException
     */
    boolean copy(File src, File dst) throws IOException {
	try {
	    int leave = 1000 * 4; //1024 * 1000; // 文件剩下的字符数 1MB = 1024KB = 1024 * 1000Byte
	    byte[] inOutb;// byte数组接受文件的数据
	    
	    FileInputStream in = new FileInputStream(src);
	    FileOutputStream out = new FileOutputStream(dst);

	    // 剩余的流数据
	    inOutb = new byte[leave];
	    in.read(inOutb, 0, leave);
	    out.write(inOutb);
	    out.flush();

	    in.close();
	    out.close();
	    
	    // 源文件, 清空时需要
	    FileOutputStream out1 = new FileOutputStream(src);
	    // copy好源文件后,  清空原日志文件内容
	    out1.write("".getBytes());
	    out1.close();
	    return true;
	} catch (FileNotFoundException e) {
	    LogLog.error("源文件不存在,或者目标文件无法被识别.");
	    return false;
	} catch (IOException e) {
	    LogLog.error("文件读写错误.");
	    return false;
	}
    }

 

 

附:  log4j 配置参数说明

log4j.rootLogger=日志级别,appender1, appender2, ….

  • 日志级别:ALL,不区分大小写
  • 注意,需在控制台输入,只需将其中一个appender定义为stdout即可
  • 注意,rootLogger默认是对整个工程生效
  • 注意,如果只想对某些包操作,那么:log4j.logger.com.hutu=info, stdout,表示该日志对package com.hutu生效
  • 注意,这样做可以区分dev/线上,也可以减小性能影响:if(log.isDebugEnabled()){log.debug();}

红唇 log4j.appender.appender1=org.apache.log4j.日志输出到哪儿

  • ConsoleAppender(控制台)
  • FileAppender(文件)
  • DailyRollingFileAppender(每天产生一个日志文件)
  • RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)
  • WriteAppender(将日志信息以流格式发送到任意指定的地方)
  • JDBCAppender(将日志信息保存到数据库中)

红唇 log4j.appender.appender1.File=文件目录及文件

${user.home}/logs/...

红唇 log4j.appender.appender1.MaxFileSize=最大文件大小

红唇 log4j.appender.appender1.MaxBackupIndex=备份文件个数

  • 其中,appender1是在第一行定义过的;
  • 文件目录及文件,例如,/home/admin/logs/hutudan.log
  • 最大文件大小,例如,100KB
  • 备份文件个数,例如,1

红唇 log4j.appender.ServerDailyRollingFile.DatePattern=日志后缀格式

  • 例如,'-'yyyy-MM-dd'.log'

红唇 log4j.appender.appender1.layout=org.apache.log4j.日志布局格式

  • HTMLLayout(以HTML表格形式布局)
  • SimpleLayout(包含日志信息的级别和信息字符串)
  • TTCCLayout(包含日志产生的时间,执行绪,类别等信息)
  • PatternLayout(可以灵活的指定布局格式,常用

红唇 log4j.appender.appender1.layout.ConversionPattern=日志输出格式

  1. 例如,%d - %m%n或%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n
  2. %c 输出日志信息所属的类的全名
  3. %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-M-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
  4. %f 输出日志信息所属的类的类名
  5. %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
  6. %m 输出代码中指定的信息,如log(message)中的message
  7. %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
  8. %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
  9. %r 输出自应用启动到输出该日志信息所耗费的毫秒数
  10. %t 输出产生该日志事件的线程名
  11. 可参考:http://blog.sina.com.cn/s/blog_4e4dd5570100qowy.html

红唇 log4j.appender.ServerDailyRollingFile.Append=true

  • 例如,不解释,追加往后写便是

红唇 总结一下:

  • Logger类:完成日志记录,设置日志信息级别
  • Appender类:决定日志去向,终端、DB、硬盘
  • Layout类:决定日志输出的样式,例如包含当前线程、行号、时间

 

 

 

你可能感兴趣的:(java,开发框架,java,IO,文件操作,log,日志)