Document version: 2.9.0
Last updated: 08/06/2020
Author: Nolan O'Brien
- Drop support for iOS 7, 8 & 9
- Improved Swift interface
- Convert private static C functions (that take
self
as an argument) to Objective-Cdirect
methods- Same low overhead, better calling syntax
- Update
initWithOutError:
toinitAndReturnError:
forTLSRollingFileOutputStream
- More idiomatic
- Increase use of
@autoreleasepool
to keep memory management tighter - Improve at launch perf by deferring the pruning of old files for
TLSRollingFileOutputStream
- Other miscellaneous bug fixes and cleanup
- Add support for capturing
os_log
logs executed within a running app.- TLSExt is provided as the interface and is not a part of TLS proper. This is because TLSExt makes use of private Apple frameworks and would lead to app store rejection.
- So, the consumer is responsible to compiling and linking the
TLSExt*.h|m
files themselves and must only do so with non-production builds. - This can be of immense help when dogfooding with developers and teammates with an Enterprise distribution (not Test Flight and not production).
- Add options to composing a log message string from
TLSLogMessageInfo
TLSComposeLogMessageInfoOptions
provides options for what components to put in the outputcomposeFormattedMessageWithOptions:
string
- Add options to TLS with
TLSLogMessageOptions
- Provides support to explicitely ignore the maximum message length cap
- Change
maximumSafeMessageLength
to truncate by default instead of discard when message length is too long and there is not delegate
- Create
TLSLoggingServiceDelegate
protocol. Currently delegates the decision of what to do when a log message with an unsafe length is encountered.
- Add
os_log
support (iOS 10+ and macOS 10.12+) withTLSOSLogOutputStream
- Add cap to log message sizes. Will also fire a notification that can be observed to identify where the message that was too large was logged from.
- Remove
TLSFileFunctionLine
struct since it is too easy to make mistakes such as constructing the struct on the stack with stack C-string values then accessing copies of the struct from other threads that should not have references to the stack C-string values.
- Add
threadName
toTLSLogMessageInfo
for additional context
- Refactor coding style/conventions to be better aligned with open source best practices
- Absolute minimal executable code changes
- Rename
TFNLogging
toTwitterLoggingService
- Add Swift support
- Simplify Crashlytics support by delegating responsibility of calling
CLSLog
to the subclass ofTLSCrashlyticsOutputStream
- Optimize log message filtering by moving quick filter checks to a concurrent queue
-
Made class
TLSFileOutputStream
more abstract as a base + protected implementation -
no longer implements @protocol
TLSDataRetrieval
-
keeps the generic readonly @property 'constants', but makes them @protected
-
implements one default initializer taking a logging directory and a file name
-
implements one convenience initializer taking a file name and making use of the default logging directory
-
makes 'init' NS_UNAVAILABLE
-
keeps the public
defaultLogFileDirectory
class method & thetls_outputLogInfo:
andtls_flush
methods -
keep the several protected
(void)write
methods -
refactor some portions of
(instancetype)initWithLogFileDirectoryPath:logFilePrefix:maxLogFiles:maxBytesPerLogFile:error:
to new protectedcreateLogFileDirectoryPath:error:
&openLogFile:error:
-
Made new protocol
TLSFileOutputStreamEvent
based on methods that had been "abstract" and "overrideable" in the old TLSFileOutputStream -
makes use of the new typedef
TLSFileOutputEvent
for the first argument of all functions -
Made new class
TLSRollingFileOutputStream
as a concrete implementation ofTLSFileOutputStream
-
copied over all of the old initializers from
TLSFileOutputStream
-
copied over from
TLSFileOutputStream
the @property items that were specific to rolling file output stream -
interface creates new NS_ENUM
TLSRollingFileOutputEvent
(based uponTLSFileOutputEvent
and override-ablefileStreamEvent
methods -
takes over implementation of protocol
TLSDataRetrieval
-
takes over implementation of
fileOutputEventBegan/Finished/Failed
methods via implementation of the @protocolTLSFileOutputStreamEvent
- Remove
permittedLoggingLevels
andshouldFilterChannelsThatAreOff
to completely decouple the filtering from theTLSLoggingService
. All output streams control their own destiny now.
- Expand maximum bytes per log file from 128MB to 1GB.
- Add
flushAfterEveryWriteEnabled
property toTLSLoggingService
.
- Initial production release