// Software License Agreement (BSD License) // // Copyright (c) 2010-2015, 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 DD_LEGACY_MACROS #define DD_LEGACY_MACROS 0 #endif #import "DDLog.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 DDAbstractDatabaseLogger : DDAbstractLogger { @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; @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; @property (assign, readwrite) NSTimeInterval deleteInterval; @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