You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by bu...@apache.org on 2004/06/28 08:05:13 UTC

DO NOT REPLY [Bug 29835] New: - DailyRollingFileAppender: cannot delete log file when specify invalid date pattern

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=29835>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=29835

DailyRollingFileAppender: cannot delete log file when specify invalid date pattern

           Summary: DailyRollingFileAppender: cannot delete log file when
                    specify invalid date pattern
           Product: Log4j
           Version: 1.2
          Platform: All
        OS/Version: Windows XP
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Appender
        AssignedTo: log4j-dev@jakarta.apache.org
        ReportedBy: w.fukushima@pfu.fujitsu.com


I'm using log4j 1.2.8 on Windows XP.
I'd like to achieve automatic-old-log-deletion when the log rolls over.

I have made a subclass of DailyRollingFileAppender and have had two problems.

Problem1)rollOver() is package private method in DailyRollingFileAppender, so
that I have to override subAppend(), which is not smart way to sense a rollover
timing.

Problem2)one of my subclass's constructor is look like this:

  public AutomaticallyRemovingDailyRollingFileAppender
    (Layout layout, String filename, String datePattern)
  throws IOException {
    super(layout, filename, datePattern);
  }

When a client code calls this constructor like this:

  AutomaticallyRemovingDailyRollingFileAppender appender
    = new AutomaticallyRemovingDailyRollingFileAppender(
      new PatternLayout(), // appropriate
      "log.txt",           // also appropriate
      "hogehoge"           // not appropriate as date pattern string
    );

  DailyRollingFileAppender's constructor calls its super class's constructor,
which results to open the specified file, and then
DailyRollingFileAppender#activateOptions() try to invoke
SimpleDateFormat#format() with specified date pattern ( i.e. "hoge" in this
example). The format() method throws IllegalArgumentException, so that
DailyRollingFileAppender's constructor throws IllegalArgumentException. This
means that

A) The client code can not get a AutomaticallyRemovingDailyRollingFileAppender's
instance.
B) The log file is opend, even though there is no way to close it.


These are very annoying problems. My suggestion is:

AnswerForProblem1) Change accessibility of rollOver() to protected.

AnswerForProblem2) Insert an error handling code for closing the log file in
DailyRollingFileAppender's constructor, or check whether the specified date
pattern is valid or not.

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org