ReadViewSDK/ReadViewDemo/Pods/DTFoundation/Core/Source/DTLog.h
2026-05-21 19:40:51 +08:00

159 lines
4.1 KiB
Objective-C

//
// DTLog.h
// DTFoundation
//
// Created by Oliver Drobnik on 06.08.13.
// Copyright (c) 2013 Cocoanetics. All rights reserved.
//
#import <Foundation/Foundation.h>
/**
Replacement for `NSLog` which can be configured to output certain log levels at run time.
*/
// block signature called for each log statement
typedef void (^DTLogBlock)(NSUInteger logLevel, NSString *fileName, NSUInteger lineNumber, NSString *methodName, NSString *format, ...);
// internal variables needed by macros
extern DTLogBlock DTLogHandler;
extern NSUInteger DTCurrentLogLevel;
/**
There is a macro for each ASL log level:
- DTLogEmergency (0)
- DTLogAlert (1)
- DTLogCritical (2)
- DTLogError (3)
- DTLogWarning (4)
- DTLogNotice (5)
- DTLogInfo (6)
- DTLogDebug (7)
*/
/**
Constants for log levels used by DTLog
*/
typedef NS_ENUM(NSUInteger, DTLogLevel)
{
/**
Log level for *emergency* messages
*/
DTLogLevelEmergency = 0,
/**
Log level for *alert* messages
*/
DTLogLevelAlert = 1,
/**
Log level for *critical* messages
*/
DTLogLevelCritical = 2,
/**
Log level for *error* messages
*/
DTLogLevelError = 3,
/**
Log level for *warning* messages
*/
DTLogLevelWarning = 4,
/**
Log level for *notice* messages
*/
DTLogLevelNotice = 5,
/**
Log level for *info* messages. This is the default log level for DTLog.
*/
DTLogLevelInfo = 6,
/**
Log level for *debug* messages
*/
DTLogLevelDebug = 7
};
/**
@name Logging Functions
*/
/**
Sets the block to be executed for messages with a log level less or equal the currently set log level
@param handler The block to handle log output
*/
void DTLogSetLoggerBlock(DTLogBlock handler);
/**
Modifies the current log level
@param logLevel The ASL log level (0-7) to set, lower numbers being more important
*/
void DTLogSetLogLevel(NSUInteger logLevel);
/**
Variant of DTLogMessage that takes a va_list.
@param logLevel The DTLogLevel for the message
@param format The log message format
@param args The va_list of arguments
*/
void DTLogMessagev(DTLogLevel logLevel, NSString *format, va_list args);
/**
Same as `NSLog` but allows for setting a message log level
@param logLevel The DTLogLevel for the message
@param format The log message format and optional variables
*/
void DTLogMessage(DTLogLevel logLevel, NSString *format, ...);
/**
Retrieves the log messages currently available for the running app
@returns an `NSArray` of `NSDictionary` entries
*/
NSArray *DTLogGetMessages(void);
/**
@name Macros
*/
// log macro for error level (0)
#define DTLogEmergency(format, ...) DTLogCallHandlerIfLevel(DTLogLevelEmergency, format, ##__VA_ARGS__)
// log macro for error level (1)
#define DTLogAlert(format, ...) DTLogCallHandlerIfLevel(DTLogLevelAlert, format, ##__VA_ARGS__)
// log macro for error level (2)
#define DTLogCritical(format, ...) DTLogCallHandlerIfLevel(DTLogLevelCritical, format, ##__VA_ARGS__)
// log macro for error level (3)
#define DTLogError(format, ...) DTLogCallHandlerIfLevel(DTLogLevelError, format, ##__VA_ARGS__)
// log macro for error level (4)
#define DTLogWarning(format, ...) DTLogCallHandlerIfLevel(DTLogLevelWarning, format, ##__VA_ARGS__)
// log macro for error level (5)
#define DTLogNotice(format, ...) DTLogCallHandlerIfLevel(DTLogLevelNotice, format, ##__VA_ARGS__)
// log macro for info level (6)
#define DTLogInfo(format, ...) DTLogCallHandlerIfLevel(DTLogLevelInfo, format, ##__VA_ARGS__)
// log macro for debug level (7)
#define DTLogDebug(format, ...) DTLogCallHandlerIfLevel(DTLogLevelDebug, format, ##__VA_ARGS__)
// macro that gets called by individual level macros
#define DTLogCallHandlerIfLevel(logLevel, format, ...) \
if (DTLogHandler && DTCurrentLogLevel>=logLevel) DTLogHandler(logLevel, DTLogSourceFileName, DTLogSourceLineNumber, DTLogSourceMethodName, format, ##__VA_ARGS__)
// helper to get the current source file name as NSString
#define DTLogSourceFileName [[NSString stringWithUTF8String:__FILE__] lastPathComponent]
// helper to get current method name
#define DTLogSourceMethodName [NSString stringWithUTF8String:__PRETTY_FUNCTION__]
// helper to get current line number
#define DTLogSourceLineNumber __LINE__