[2] | 1 | /*
|
---|
| 2 | * Licensed to the Apache Software Foundation (ASF) under one or more
|
---|
| 3 | * contributor license agreements. See the NOTICE file distributed with
|
---|
| 4 | * this work for additional information regarding copyright ownership.
|
---|
| 5 | * The ASF licenses this file to You under the Apache License, Version 2.0
|
---|
| 6 | * (the "License"); you may not use this file except in compliance with
|
---|
| 7 | * the License. You may obtain a copy of the License at
|
---|
| 8 | *
|
---|
| 9 | * http://www.apache.org/licenses/LICENSE-2.0
|
---|
| 10 | *
|
---|
| 11 | * Unless required by applicable law or agreed to in writing, software
|
---|
| 12 | * distributed under the License is distributed on an "AS IS" BASIS,
|
---|
| 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
---|
| 14 | * See the License for the specific language governing permissions and
|
---|
| 15 | * limitations under the License.
|
---|
| 16 | */
|
---|
| 17 |
|
---|
| 18 | #ifndef _LOG4CXX_DAILYROLLINGFILEAPPENDER_H
|
---|
| 19 | #define _LOG4CXX_DAILYROLLINGFILEAPPENDER_H
|
---|
| 20 |
|
---|
| 21 | #if defined(_MSC_VER)
|
---|
| 22 | #pragma warning ( push )
|
---|
| 23 | #pragma warning ( disable: 4231 4251 4275 4786 )
|
---|
| 24 | #endif
|
---|
| 25 |
|
---|
| 26 |
|
---|
| 27 | #include <log4cxx/appender.h>
|
---|
| 28 | #include <log4cxx/fileappender.h>
|
---|
| 29 | #include <log4cxx/spi/optionhandler.h>
|
---|
| 30 | #include <log4cxx/rolling/rollingfileappenderskeleton.h>
|
---|
| 31 |
|
---|
| 32 | namespace log4cxx {
|
---|
| 33 | namespace helpers {
|
---|
| 34 | class Pool;
|
---|
| 35 | }
|
---|
| 36 |
|
---|
| 37 | namespace spi {
|
---|
| 38 | class ErrorHandler;
|
---|
| 39 | typedef log4cxx::helpers::ObjectPtrT<ErrorHandler> ErrorHandlerPtr;
|
---|
| 40 | }
|
---|
| 41 |
|
---|
| 42 |
|
---|
| 43 | /**
|
---|
| 44 | DailyRollingFileAppender extends {@link log4cxx::FileAppender FileAppender} so that the
|
---|
| 45 | underlying file is rolled over at a user chosen frequency.
|
---|
| 46 |
|
---|
| 47 | <p>The rolling schedule is specified by the <b>DatePattern</b>
|
---|
| 48 | option. This pattern should follow the
|
---|
| 49 | {@link log4cxx::helpers::SimpleDateFormat SimpleDateFormat}
|
---|
| 50 | conventions. In particular, you <em>must</em> escape literal text
|
---|
| 51 | within a pair of single quotes. A formatted version of the date
|
---|
| 52 | pattern is used as the suffix for the rolled file name.
|
---|
| 53 |
|
---|
| 54 | <p>For example, if the <b>File</b> option is set to
|
---|
| 55 | <code>/foo/bar.log</code> and the <b>DatePattern</b> set to
|
---|
| 56 | <code>'.'yyyy-MM-dd</code>, on 2001-02-16 at midnight, the logging
|
---|
| 57 | file <code>/foo/bar.log</code> will be copied to
|
---|
| 58 | <code>/foo/bar.log.2001-02-16</code> and logging for 2001-02-17
|
---|
| 59 | will continue in <code>/foo/bar.log</code> until it rolls over
|
---|
| 60 | the next day.
|
---|
| 61 |
|
---|
| 62 | <p>Is is possible to specify monthly, weekly, half-daily, daily,
|
---|
| 63 | hourly, or minutely rollover schedules.
|
---|
| 64 |
|
---|
| 65 | <p><table border="1" cellpadding="2">
|
---|
| 66 | <tr>
|
---|
| 67 | <th>DatePattern</th>
|
---|
| 68 | <th>Rollover schedule</th>
|
---|
| 69 | <th>Example</th>
|
---|
| 70 |
|
---|
| 71 | <tr>
|
---|
| 72 | <td><code>'.'yyyy-MM</code>
|
---|
| 73 | <td>Rollover at the beginning of each month</td>
|
---|
| 74 |
|
---|
| 75 | <td>At midnight of May 31st, 2002 <code>/foo/bar.log</code> will be
|
---|
| 76 | copied to <code>/foo/bar.log.2002-05</code>. Logging for the month
|
---|
| 77 | of June will be output to <code>/foo/bar.log</code> until it is
|
---|
| 78 | also rolled over the next month.
|
---|
| 79 |
|
---|
| 80 | <tr>
|
---|
| 81 | <td><code>'.'yyyy-ww</code>
|
---|
| 82 |
|
---|
| 83 | <td>Rollover at the first day of each week. The first day of the
|
---|
| 84 | week depends on the locale.</td>
|
---|
| 85 |
|
---|
| 86 | <td>Assuming the first day of the week is Sunday, on Saturday
|
---|
| 87 | midnight, June 9th 2002, the file <i>/foo/bar.log</i> will be
|
---|
| 88 | copied to <i>/foo/bar.log.2002-23</i>. Logging for the 24th week
|
---|
| 89 | of 2002 will be output to <code>/foo/bar.log</code> until it is
|
---|
| 90 | rolled over the next week.
|
---|
| 91 |
|
---|
| 92 | <tr>
|
---|
| 93 | <td><code>'.'yyyy-MM-dd</code>
|
---|
| 94 |
|
---|
| 95 | <td>Rollover at midnight each day.</td>
|
---|
| 96 |
|
---|
| 97 | <td>At midnight, on March 8th, 2002, <code>/foo/bar.log</code> will
|
---|
| 98 | be copied to <code>/foo/bar.log.2002-03-08</code>. Logging for the
|
---|
| 99 | 9th day of March will be output to <code>/foo/bar.log</code> until
|
---|
| 100 | it is rolled over the next day.
|
---|
| 101 |
|
---|
| 102 | <tr>
|
---|
| 103 | <td><code>'.'yyyy-MM-dd-a</code>
|
---|
| 104 |
|
---|
| 105 | <td>Rollover at midnight and midday of each day.</td>
|
---|
| 106 |
|
---|
| 107 | <td>At noon, on March 9th, 2002, <code>/foo/bar.log</code> will be
|
---|
| 108 | copied to <code>/foo/bar.log.2002-03-09-AM</code>. Logging for the
|
---|
| 109 | afternoon of the 9th will be output to <code>/foo/bar.log</code>
|
---|
| 110 | until it is rolled over at midnight.
|
---|
| 111 |
|
---|
| 112 | <tr>
|
---|
| 113 | <td><code>'.'yyyy-MM-dd-HH</code>
|
---|
| 114 |
|
---|
| 115 | <td>Rollover at the top of every hour.</td>
|
---|
| 116 |
|
---|
| 117 | <td>At approximately 11:00.000 o'clock on March 9th, 2002,
|
---|
| 118 | <code>/foo/bar.log</code> will be copied to
|
---|
| 119 | <code>/foo/bar.log.2002-03-09-10</code>. Logging for the 11th hour
|
---|
| 120 | of the 9th of March will be output to <code>/foo/bar.log</code>
|
---|
| 121 | until it is rolled over at the beginning of the next hour.
|
---|
| 122 |
|
---|
| 123 |
|
---|
| 124 | <tr>
|
---|
| 125 | <td><code>'.'yyyy-MM-dd-HH-mm</code>
|
---|
| 126 |
|
---|
| 127 | <td>Rollover at the beginning of every minute.</td>
|
---|
| 128 |
|
---|
| 129 | <td>At approximately 11:23,000, on March 9th, 2001,
|
---|
| 130 | <code>/foo/bar.log</code> will be copied to
|
---|
| 131 | <code>/foo/bar.log.2001-03-09-10-22</code>. Logging for the minute
|
---|
| 132 | of 11:23 (9th of March) will be output to
|
---|
| 133 | <code>/foo/bar.log</code> until it is rolled over the next minute.
|
---|
| 134 |
|
---|
| 135 | </table>
|
---|
| 136 |
|
---|
| 137 | <p>Do not use the colon ":" character in anywhere in the
|
---|
| 138 | <b>DatePattern</b> option. The text before the colon is interpeted
|
---|
| 139 | as the protocol specificaion of a URL which is probably not what
|
---|
| 140 | you want.
|
---|
| 141 | */
|
---|
| 142 |
|
---|
| 143 | class LOG4CXX_EXPORT DailyRollingFileAppender : public log4cxx::rolling::RollingFileAppenderSkeleton {
|
---|
| 144 | DECLARE_LOG4CXX_OBJECT(DailyRollingFileAppender)
|
---|
| 145 | BEGIN_LOG4CXX_CAST_MAP()
|
---|
| 146 | LOG4CXX_CAST_ENTRY(DailyRollingFileAppender)
|
---|
| 147 | LOG4CXX_CAST_ENTRY_CHAIN(FileAppender)
|
---|
| 148 | END_LOG4CXX_CAST_MAP()
|
---|
| 149 |
|
---|
| 150 | /**
|
---|
| 151 | The date pattern used to initiate rollover.
|
---|
| 152 | */
|
---|
| 153 | LogString datePattern;
|
---|
| 154 |
|
---|
| 155 |
|
---|
| 156 | public:
|
---|
| 157 | /**
|
---|
| 158 | The default constructor simply calls its {@link
|
---|
| 159 | FileAppender#FileAppender parents constructor}. */
|
---|
| 160 | DailyRollingFileAppender();
|
---|
| 161 |
|
---|
| 162 | /**
|
---|
| 163 | Instantiate a DailyRollingFileAppender and open the file designated by
|
---|
| 164 | <code>filename</code>. The opened filename will become the ouput
|
---|
| 165 | destination for this appender.
|
---|
| 166 |
|
---|
| 167 | */
|
---|
| 168 | DailyRollingFileAppender(
|
---|
| 169 | const LayoutPtr& layout,
|
---|
| 170 | const LogString& filename,
|
---|
| 171 | const LogString& datePattern);
|
---|
| 172 |
|
---|
| 173 |
|
---|
| 174 | /**
|
---|
| 175 | The <b>DatePattern</b> takes a string in the same format as
|
---|
| 176 | expected by {@link log4cxx::helpers::SimpleDateFormat SimpleDateFormat}. This options determines the
|
---|
| 177 | rollover schedule.
|
---|
| 178 | */
|
---|
| 179 | void setDatePattern(const LogString& pattern);
|
---|
| 180 |
|
---|
| 181 | /** Returns the value of the <b>DatePattern</b> option. */
|
---|
| 182 | LogString getDatePattern();
|
---|
| 183 |
|
---|
| 184 | void setOption(const LogString& option,
|
---|
| 185 | const LogString& value);
|
---|
| 186 |
|
---|
| 187 | /**
|
---|
| 188 | * Prepares DailyRollingFileAppender for use.
|
---|
| 189 | */
|
---|
| 190 | void activateOptions(log4cxx::helpers::Pool&);
|
---|
| 191 |
|
---|
| 192 | };
|
---|
| 193 |
|
---|
| 194 | LOG4CXX_PTR_DEF(DailyRollingFileAppender);
|
---|
| 195 |
|
---|
| 196 | }
|
---|
| 197 |
|
---|
| 198 | #if defined(_MSC_VER)
|
---|
| 199 | #pragma warning ( pop )
|
---|
| 200 | #endif
|
---|
| 201 |
|
---|
| 202 |
|
---|
| 203 | #endif
|
---|