6 log4j -- 一个笨的使用方法

  log4j的说明:

  Log4j是NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

  问题:通常我们在工程中配置log4j配置文件后,把工程打包在linux环境上运行的时候,经常出现自己在log4j中设置的日志文件输出没有产生日志文件,通常定位起来很麻烦,有可能是程序未找到该log4j配置文件或者是别的log4j配置文件把该配置文件覆盖了等问题,本人采用一种比较笨的方法显示指明程序采用的log4j配置文件。

     方法代码如下:

public static String LOGFILE = "";

    static {
        LOGFILE = getLog4jPath();
        if (new File(LOGFILE).exists()) {
            PropertyConfigurator.configure(LOGFILE);
            logger.info("log4j配置文件生效,路径为:{}", LOGFILE);
        } else {
            logger.warn("log4j配置文件:{}不存在", LOGFILE);
        }
    }

这样就确保了程序加载的是你指定的log4j.properties配置文件。

  log4j.properties配置文件内容:

 ### set log levels ###
log4j.rootLogger = debug,stdout,R,E

### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.Threshold = INFO
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} %p [%t] %c{2} (%M:%L) - %m%n

### 输出etl-web日志到文件 ###
log4j.appender.R = org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.ImmediateFlush=true
log4j.appender.R.Append = true
log4j.appender.R.File = ${catalina.home}/logs/etl_web.log
log4j.appender.R.encoding=UTF-8
log4j.appender.R.Threshold = INFO
log4j.appender.R.DatePattern='.'yyyy-MM-dd
log4j.appender.R.layout = org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} %p [%t] %c{2} (%M:%L) - %m%n

### 保存异常信息到单独文件 ###
log4j.appender.E = org.apache.log4j.RollingFileAppender
log4j.appender.E.File = ${catalina.home}/logs/etl_error.log
log4j.appender.E.encoding=UTF-8
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} %p [%t] %c{2} (%M:%L) - %m%n

  日志输出级别是debug,三种输出路径,分别是stdout,R,E

  stdout为控制台输出,输出INFO及以上级别

  R为按天输出文件,输出级别为INFO及以上,E和R基本相同,但仅输出ERR及以上级别日志。

  有时候,你可能不希望有些jar包的日志输出到你的日志里面,你可以在log4j.properties按照如下方式配置:

log4j.logger.org.springframework=OFF 作用是:org.springframework包下面的日志不再输出,这样就屏蔽了所有的spring日志。

 ### set log levels ###
log4j.rootLogger = debug,stdout,F
 
log4j.logger.org.springframework=OFF  
log4j.logger.org.directwebremoting=OFF  
log4j.logger.org.quartz=OFF  
log4j.logger.org.terracotta.quartz=OFF
log4j.logger.org.mybatis=OFF 
log4j.logger.org.apache.ibatis=OFF


### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.Threshold = INFO
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} %p [%t] %c{2} (%M:%L) - %m%n

### 输出etl-core任务日志到文件 ###
log4j.appender.F = org.apache.log4j.FileAppender
log4j.appender.F.ImmediateFlush=true
log4j.appender.F.BufferedIO=false
log4j.appender.F.Append = true
log4j.appender.F.File = ${etl_core_log_path}/etl_core.log
log4j.appender.F.encoding=UTF-8
log4j.appender.F.Threshold = INFO
log4j.appender.F.layout = org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} %p [%t] %c{2} (%M:%L) - %m%n
etl_core_log_path=${catalina.home}/logs;

  log4j可学习的地方还有很多,如:如何动态更改日志文件位置