// Software License Agreement (BSD License)
|
//
|
// Copyright (c) 2010-2016, Deusty, LLC
|
// All rights reserved.
|
//
|
// Redistribution and use of this software in source and binary forms,
|
// with or without modification, are permitted provided that the following conditions are met:
|
//
|
// *Redistributions of source code must retain the above copyright notice,
|
// this list of conditions and the following disclaimer.
|
//
|
// *Neither the name of Deusty nor the names of its contributors may be used
|
// to endorse or promote products derived from this software without specific
|
// prior written permission of Deusty, LLC.
|
|
// Disable legacy macros
|
#ifndef OBSDD_LEGACY_MACROS
|
#define OBSDD_LEGACY_MACROS 0
|
#endif
|
|
#import "OBSDDLog.h"
|
|
/**
|
*This class provides an abstract implementation of a database logger.
|
*
|
*That is, it provides the base implementation for a database logger to build atop of.
|
*All that is needed for a concrete database logger is to extend this class
|
*and override the methods in the implementation file that are prefixed with "db_".
|
**/
|
@interface OBSDDAbstractDatabaseLogger : OBSDDAbstractLogger {
|
|
@protected
|
NSUInteger _saveThreshold;
|
NSTimeInterval _saveInterval;
|
NSTimeInterval _maxAge;
|
NSTimeInterval _deleteInterval;
|
BOOL _deleteOnEverySave;
|
|
BOOL _saveTimerSuspended;
|
NSUInteger _unsavedCount;
|
dispatch_time_t _unsavedTime;
|
dispatch_source_t _saveTimer;
|
dispatch_time_t _lastDeleteTime;
|
dispatch_source_t _deleteTimer;
|
}
|
|
/**
|
*Specifies how often to save the data to disk.
|
*Since saving is an expensive operation (disk io) it is not done after every log statement.
|
*These properties allow you to configure how/when the logger saves to disk.
|
*
|
*A save is done when either (whichever happens first):
|
*
|
*- The number of unsaved log entries reaches saveThreshold
|
*- The amount of time since the oldest unsaved log entry was created reaches saveInterval
|
*
|
*You can optionally disable the saveThreshold by setting it to zero.
|
*If you disable the saveThreshold you are entirely dependent on the saveInterval.
|
*
|
*You can optionally disable the saveInterval by setting it to zero (or a negative value).
|
*If you disable the saveInterval you are entirely dependent on the saveThreshold.
|
*
|
*It's not wise to disable both saveThreshold and saveInterval.
|
*
|
*The default saveThreshold is 500.
|
*The default saveInterval is 60 seconds.
|
**/
|
@property (assign, readwrite) NSUInteger saveThreshold;
|
|
/**
|
* See the description for the `saveThreshold` property
|
*/
|
@property (assign, readwrite) NSTimeInterval saveInterval;
|
|
/**
|
*It is likely you don't want the log entries to persist forever.
|
*Doing so would allow the database to grow infinitely large over time.
|
*
|
*The maxAge property provides a way to specify how old a log statement can get
|
*before it should get deleted from the database.
|
*
|
*The deleteInterval specifies how often to sweep for old log entries.
|
*Since deleting is an expensive operation (disk io) is is done on a fixed interval.
|
*
|
*An alternative to the deleteInterval is the deleteOnEverySave option.
|
*This specifies that old log entries should be deleted during every save operation.
|
*
|
*You can optionally disable the maxAge by setting it to zero (or a negative value).
|
*If you disable the maxAge then old log statements are not deleted.
|
*
|
*You can optionally disable the deleteInterval by setting it to zero (or a negative value).
|
*
|
*If you disable both deleteInterval and deleteOnEverySave then old log statements are not deleted.
|
*
|
*It's not wise to enable both deleteInterval and deleteOnEverySave.
|
*
|
*The default maxAge is 7 days.
|
*The default deleteInterval is 5 minutes.
|
*The default deleteOnEverySave is NO.
|
**/
|
@property (assign, readwrite) NSTimeInterval maxAge;
|
|
/**
|
* See the description for the `maxAge` property
|
*/
|
@property (assign, readwrite) NSTimeInterval deleteInterval;
|
|
/**
|
* See the description for the `maxAge` property
|
*/
|
@property (assign, readwrite) BOOL deleteOnEverySave;
|
|
/**
|
*Forces a save of any pending log entries (flushes log entries to disk).
|
**/
|
- (void)savePendingLogEntries;
|
|
/**
|
*Removes any log entries that are older than maxAge.
|
**/
|
- (void)deleteOldLogEntries;
|
|
@end
|