source: XMLIO_V2/external/src/POCO/Foundation/RotateStrategy.cpp @ 80

Last change on this file since 80 was 80, checked in by ymipsl, 14 years ago

ajout lib externe

  • Property svn:eol-style set to native
File size: 3.3 KB
Line 
1//
2// RotateStrategy.cpp
3//
4// $Id: //poco/1.3/Foundation/src/RotateStrategy.cpp#3 $
5//
6// Library: Foundation
7// Package: Logging
8// Module:  FileChannel
9//
10// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
11// and Contributors.
12//
13// Permission is hereby granted, free of charge, to any person or organization
14// obtaining a copy of the software and accompanying documentation covered by
15// this license (the "Software") to use, reproduce, display, distribute,
16// execute, and transmit the Software, and to prepare derivative works of the
17// Software, and to permit third-parties to whom the Software is furnished to
18// do so, all subject to the following:
19//
20// The copyright notices in the Software and this entire statement, including
21// the above license grant, this restriction and the following disclaimer,
22// must be included in all copies of the Software, in whole or in part, and
23// all derivative works of the Software, unless such copies or derivative
24// works are solely in the form of machine-executable object code generated by
25// a source language processor.
26//
27// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
30// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
31// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
32// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
33// DEALINGS IN THE SOFTWARE.
34//
35
36
37#include <Poco/RotateStrategy.h>
38#include <Poco/FileStream.h>
39#include <Poco/DateTimeParser.h>
40#include <Poco/DateTimeFormatter.h>
41#include <Poco/DateTimeFormat.h>
42
43
44namespace Poco {
45
46
47//
48// RotateStrategy
49//
50
51
52RotateStrategy::RotateStrategy()
53{
54}
55
56
57RotateStrategy::~RotateStrategy()
58{
59}
60
61
62//
63// RotateByIntervalStrategy
64//
65
66
67const std::string RotateByIntervalStrategy::ROTATE_TEXT("# Log file created/rotated ");
68
69
70RotateByIntervalStrategy::RotateByIntervalStrategy(const Timespan& span): 
71        _span(span),
72        _lastRotate(0)
73{
74        if (span.totalMicroseconds() <= 0) throw InvalidArgumentException("time span must be greater than zero");
75}
76
77
78RotateByIntervalStrategy::~RotateByIntervalStrategy()
79{
80}
81
82
83bool RotateByIntervalStrategy::mustRotate(LogFile* pFile)
84{
85        if (_lastRotate == 0 || pFile->size() == 0)
86        {
87                if (pFile->size() != 0)
88                {
89                        Poco::FileInputStream istr(pFile->path());
90                        std::string tag;
91                        std::getline(istr, tag);
92                        if (tag.compare(0, ROTATE_TEXT.size(), ROTATE_TEXT) == 0)
93                        {
94                                std::string timestamp(tag, ROTATE_TEXT.size());
95                                int tzd;
96                                _lastRotate = DateTimeParser::parse(DateTimeFormat::RFC1036_FORMAT, timestamp, tzd).timestamp();
97                        }
98                        else _lastRotate = pFile->creationDate();
99                }
100                else
101                {
102                        _lastRotate.update();
103                        std::string tag(ROTATE_TEXT);
104                        DateTimeFormatter::append(tag, _lastRotate, DateTimeFormat::RFC1036_FORMAT);
105                        pFile->write(tag);
106                }
107        }
108        Timestamp now;
109        return _span <= now - _lastRotate;
110}
111
112
113//
114// RotateBySizeStrategy
115//
116
117
118RotateBySizeStrategy::RotateBySizeStrategy(UInt64 size): _size(size)
119{
120        if (size == 0) throw InvalidArgumentException("size must be greater than zero");
121}
122
123
124RotateBySizeStrategy::~RotateBySizeStrategy()
125{
126}
127
128
129bool RotateBySizeStrategy::mustRotate(LogFile* pFile)
130{
131        return pFile->size() >= _size;
132}
133
134
135} // namespace Poco
Note: See TracBrowser for help on using the repository browser.