123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /*
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- #import <Foundation/Foundation.h>
- #import <React/RCTAssert.h>
- #import <React/RCTDefines.h>
- #import <React/RCTUtils.h>
- #ifndef RCTLOG_ENABLED
- #define RCTLOG_ENABLED 1
- #endif
- /**
- * Thresholds for logs to display a redbox. You can override these values when debugging
- * in order to tweak the default logging behavior.
- */
- #ifndef RCTLOG_REDBOX_LEVEL
- #define RCTLOG_REDBOX_LEVEL RCTLogLevelError
- #endif
- /**
- * Logging macros. Use these to log information, warnings and errors in your
- * own code.
- */
- #define RCTLog(...) _RCTLog(RCTLogLevelInfo, __VA_ARGS__)
- #define RCTLogTrace(...) _RCTLog(RCTLogLevelTrace, __VA_ARGS__)
- #define RCTLogInfo(...) _RCTLog(RCTLogLevelInfo, __VA_ARGS__)
- #define RCTLogAdvice(string, ...) RCTLogWarn([@"(ADVICE) " stringByAppendingString:(NSString *)string], __VA_ARGS__)
- #define RCTLogWarn(...) _RCTLog(RCTLogLevelWarning, __VA_ARGS__)
- #define RCTLogError(...) _RCTLog(RCTLogLevelError, __VA_ARGS__)
- /**
- * An enum representing the severity of the log message.
- */
- typedef NS_ENUM(NSInteger, RCTLogLevel) {
- RCTLogLevelTrace = 0,
- RCTLogLevelInfo = 1,
- RCTLogLevelWarning = 2,
- RCTLogLevelError = 3,
- RCTLogLevelFatal = 4
- };
- /**
- * An enum representing the source of a log message.
- */
- typedef NS_ENUM(NSInteger, RCTLogSource) { RCTLogSourceNative = 1, RCTLogSourceJavaScript = 2 };
- /**
- * A block signature to be used for custom logging functions. In most cases you
- * will want to pass these arguments to the RCTFormatLog function in order to
- * generate a string.
- */
- typedef void (^RCTLogFunction)(
- RCTLogLevel level,
- RCTLogSource source,
- NSString *fileName,
- NSNumber *lineNumber,
- NSString *message);
- /**
- * A method to generate a string from a collection of log data. To omit any
- * particular data from the log, just pass nil or zero for the argument.
- */
- RCT_EXTERN NSString *
- RCTFormatLog(NSDate *timestamp, RCTLogLevel level, NSString *fileName, NSNumber *lineNumber, NSString *message);
- /**
- * A method to generate a string RCTLogLevel
- */
- RCT_EXTERN NSString *RCTFormatLogLevel(RCTLogLevel);
- /**
- * A method to generate a string from a RCTLogSource
- */
- RCT_EXTERN NSString *RCTFormatLogSource(RCTLogSource);
- /**
- * The default logging function used by RCTLogXX.
- */
- extern RCTLogFunction RCTDefaultLogFunction;
- /**
- * These methods get and set the global logging threshold. This is the level
- * below which logs will be ignored. Default is RCTLogLevelInfo for debug and
- * RCTLogLevelError for production.
- */
- RCT_EXTERN void RCTSetLogThreshold(RCTLogLevel threshold);
- RCT_EXTERN RCTLogLevel RCTGetLogThreshold(void);
- /**
- * These methods get and set the global logging function called by the RCTLogXX
- * macros. You can use these to replace the standard behavior with custom log
- * functionality.
- */
- RCT_EXTERN void RCTSetLogFunction(RCTLogFunction logFunction);
- RCT_EXTERN RCTLogFunction RCTGetLogFunction(void);
- /**
- * This appends additional code to the existing log function, without replacing
- * the existing functionality. Useful if you just want to forward logs to an
- * extra service without changing the default behavior.
- */
- RCT_EXTERN void RCTAddLogFunction(RCTLogFunction logFunction);
- /**
- * This method temporarily overrides the log function while performing the
- * specified block. This is useful for testing purposes (to detect if a given
- * function logs something) or to suppress or override logging temporarily.
- */
- RCT_EXTERN void RCTPerformBlockWithLogFunction(void (^block)(void), RCTLogFunction logFunction);
- /**
- * This method adds a conditional prefix to any messages logged within the scope
- * of the passed block. This is useful for adding additional context to log
- * messages. The block will be performed synchronously on the current thread.
- */
- RCT_EXTERN void RCTPerformBlockWithLogPrefix(void (^block)(void), NSString *prefix);
- /**
- * Private logging function - ignore this.
- */
- #if RCTLOG_ENABLED
- #define _RCTLog(lvl, ...) _RCTLogNativeInternal(lvl, __FILE__, __LINE__, __VA_ARGS__)
- #else
- #define _RCTLog(lvl, ...) \
- do { \
- } while (0)
- #endif
- RCT_EXTERN void _RCTLogNativeInternal(RCTLogLevel, const char *, int, NSString *, ...) NS_FORMAT_FUNCTION(4, 5);
- RCT_EXTERN void _RCTLogJavaScriptInternal(RCTLogLevel, NSString *);
|