diff options
Diffstat (limited to 'src/main/include/log4cxx/helpers/filewatchdog.h')
-rw-r--r-- | src/main/include/log4cxx/helpers/filewatchdog.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/main/include/log4cxx/helpers/filewatchdog.h b/src/main/include/log4cxx/helpers/filewatchdog.h new file mode 100644 index 0000000..0b8aa65 --- /dev/null +++ b/src/main/include/log4cxx/helpers/filewatchdog.h @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _LOG4CXX_HELPERS_FILEWATCHDOG_H +#define _LOG4CXX_HELPERS_FILEWATCHDOG_H + +#include <log4cxx/logstring.h> +#include <time.h> +#include <log4cxx/helpers/pool.h> +#include <log4cxx/helpers/thread.h> +#include <log4cxx/file.h> + +namespace log4cxx +{ + namespace helpers + { + + /** + Check every now and then that a certain file has not changed. If it + has, then call the #doOnChange method. + */ + class LOG4CXX_EXPORT FileWatchdog + { + public: + virtual ~FileWatchdog(); + /** + The default delay between every file modification check, set to 60 + seconds. */ + static long DEFAULT_DELAY /*= 60000*/; + + protected: + /** + The name of the file to observe for changes. + */ + File file; + + /** + The delay to observe between every check. + By default set DEFAULT_DELAY.*/ + long delay; + log4cxx_time_t lastModif; + bool warnedAlready; + volatile unsigned int interrupted; + + protected: + FileWatchdog(const File& filename); + virtual void doOnChange() = 0; + void checkAndConfigure(); + + public: + /** + Set the delay to observe between each check of the file changes. + */ + void setDelay(long delay1) + { this->delay = delay1; } + + void start(); + + private: + static void* LOG4CXX_THREAD_FUNC run(apr_thread_t* thread, void* data); + Pool pool; + Thread thread; + + FileWatchdog(const FileWatchdog&); + FileWatchdog& operator=(const FileWatchdog&); + + }; + } // namespace helpers +} // namespace log4cxx + + +#endif // _LOG4CXX_HELPERS_FILEWATCHDOG_H |