各位大哥大姐知不知道如果配置log4j,可以让每一次访问server,都出一个新的log文件,而不是全写在一个文件里啊.不要告诉我自己重写log4j,那只是最后一招

解决方案 »

  1.   

    定义appender的输出目的地。定义一个appender的输出目的地的格式为log4j.appender.appenderName = fully.qualified.name.of.appender.class。log4j提供了以下几种常用的输出目的地:
    ? org.apache.log4j.ConsoleAppender,将日志信息输出到控制台
    ? org.apache.log4j.FileAppender,将日志信息输出到一个文件
    ? org.apache.log4j.DailyRollingFileAppender,将日志信息输出到一个,并且每天输出到一个新的日志文件
    ? org.apache.log4j.RollingFileAppender,将日志信息输出到一个文件,通过指定文件的的尺寸,当文件大小到达指定尺寸的时候会自动把文件改名,如名为example.log的文件会改名为example.log.1,同时产生一个新的example.log文件。如果新的文件再次达到指定尺寸,又会自动把文件改名为example.log.2,同时产生一个example.log文件。依此类推,直到example.log. MaxBackupIndex,MaxBackupIndex的值可在配置文件中定义。
      

  2.   


    # Set root logger level to ERROR and its only appender to R.
    log4j.rootLogger = INFO,R# R is set to be a DailyRollingFileAppender.
    log4j.appender.R = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File = Application.log
    log4j.appender.R.DatePattern = yyyy-MM-dd'.log'
    log4j.appender.R.layout = org.apache.log4j.PatternLayout
    log4j.appender.R.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
      

  3.   

    可以控制文件的大小的方法我知道,我就是需要控制每次访问单独出一个log文件.
    阿敏的方法只是每天出一个.
      

  4.   

    每次访问出一个log文件,感觉如果那样的话,一天访问几百次,那不是要几百个文件
    顺便问一下,这个做什么用呢?
      

  5.   

    其实也没什么大不了的,只是前不久做一个.net的项目,用了人家公司提供的framework,里面能实现这种功能,最近没事想看看log4j是否也能简单的实现.
      

  6.   

    可以实现,他的难度不在于log4j的配置上面,我们这些都是应该再代码里面来控制。http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=207948
    这个是动态地修改Appender的输出文件然后你只需要每次有新的连接到Server的时候调用这个代码就可以了
    :)
      

  7.   

    对照上面的配置,把日志文件的命名再细分一点就ok了。
    比如精确到秒,那么每次启动的时候必然创建的是一个新文件。
    log4j.appender.R.DatePattern = yyyy-MM-dd-HH-mm-ss.logDailyRollingFileAppender是可以支持每分钟就生成一个日志文件的。org.apache.log4j.DailyRollingFileAppender的源代码如下:void printPeriodicity(int type) {
        switch(type) {
        case TOP_OF_MINUTE:
          LogLog.debug("Appender ["+name+"] to be rolled every minute.");
          break;
        case TOP_OF_HOUR:
          LogLog.debug("Appender ["+name
       +"] to be rolled on top of every hour.");
          break;
        case HALF_DAY:
          LogLog.debug("Appender ["+name
       +"] to be rolled at midday and midnight.");
          break;
        case TOP_OF_DAY:
          LogLog.debug("Appender ["+name
       +"] to be rolled at midnight.");
          break;
        case TOP_OF_WEEK:
          LogLog.debug("Appender ["+name
       +"] to be rolled at start of week.");
          break;
        case TOP_OF_MONTH:
          LogLog.debug("Appender ["+name
       +"] to be rolled at start of every month.");
          break;
        default:
          LogLog.warn("Unknown periodicity for appender ["+name+"].");
        }
      }