You can use our APIs to send your mobile apps logs to New Relic. Your logs will be in one place where you can analyze them.
Enable mobile logs
By default, our mobile agent doesn't collect logs. To enable mobile logs:
- Go to one.newrelic.com > All capabilities.
- Click Mobile.
- Click on your mobile app.
- In the left pane under Settings, click Application.
- Toggle Mobile Logs on.
- Click Save.
Configure your logs
To configure the sampling rate or log level:
- In New Relic, navigate to your mobile app.
- In the left pane under Settings, click Application.
- To change the sample rate, select a new value in the field under Sample rate of total sessions.
- To change the log level, select your preferred log level in the dropdown under Logs verbosity. The debug log level should only be used if you want to see agent debugging logs.
View logs in New Relic
To view your logs in the UI:
- Navigate to your mobile app.
- In the left pane under Triage, click Logs.
Note that there may be some mobile logging delays:
- It will take up to 15 minutes for logs to appear in the Logs page.
- It will take up to 15 minutes for changes to the logs toggle, sampling rate, and log level to be reflected within your mobile application.
Use APIs to capture logs
The API below provides a comprehensive set of logging methods to capture various types of information and events in your application. These methods allow you to log messages with different severity levels (info, warning, debug, verbose, error), custom log levels, and additional context such as throwables (exceptions) and attributes.
Keep in mind that when you use the logging APIs, you should only use the debug log level if you want to see agent debugging logs.
Syntax
Java
NewRelic.logInfo(String message)
NewRelic.logWarning(String message)
NewRelic.logDebug(String message)
NewRelic.logVerbose(String message)
NewRelic.logError(String message)
NewRelic.log(LogLevel logLevel, String message)
NewRelic.logThrowable(LogLevel logLevel, String message, Throwable throwable)
NewRelic.logAttributes(Map<String, Object> attributes)
NewRelic.logAll(Throwable throwable, Map<String, Object> attributes)
Kotlin
NewRelic.logInfo(String message)
NewRelic.logWarning(String message)
NewRelic.logDebug(String message)
NewRelic.logVerbose(String message)
NewRelic.logError(String message)
NewRelic.log(LogLevel logLevel, String message)
NewRelic.logThrowable(LogLevel logLevel, String message, Throwable throwable)
NewRelic.logAttributes(Map<String, Object> attributes)
NewRelic.logAll(Throwable throwable, Map<String, Object> attributes)
Example
Java
// Log infoNewRelic.logInfo("This is an info message");
// Log warningNewRelic.logWarning("This is a warning message");
// Log debugNewRelic.logDebug("This is a debug message");
// Log verboseNewRelic.logVerbose("This is a verbose message");
// Log errorNewRelic.logError("This is an error message");
// Log with specific log levelNewRelic.log(LogLevel.INFO, "This is a log message with INFO level");
// Log throwable with specific log leveltry { throw new Exception("This is a test exception");} catch (Exception e) { NewRelic.logThrowable(LogLevel.ERROR, "Exception occurred", e);}
// Log attributesMap<String, Object> attributes = new HashMap<>();attributes.put("key1", "value1");attributes.put("key2", 123);NewRelic.logAttributes(attributes);
// Log all with throwable and attributestry { throw new Exception("This is another test exception");} catch (Exception e) { NewRelic.logAll(e, attributes);}
Kotlin
// Log infoNewRelic.logInfo("This is an info message")
// Log warningNewRelic.logWarning("This is a warning message")
// Log debugNewRelic.logDebug("This is a debug message")
// Log verboseNewRelic.logVerbose("This is a verbose message")
// Log errorNewRelic.logError("This is an error message")
// Log with specific log levelNewRelic.log(LogLevel.INFO, "This is a log message with INFO level")
// Log throwable with specific log leveltry { throw Exception("This is a test exception")} catch (e: Exception) { NewRelic.logThrowable(LogLevel.ERROR, "Exception occurred", e)}
// Log attributesval attributes = mapOf("key1" to "value1", "key2" to 123)NewRelic.logAttributes(attributes)
Syntax
Objective-c
(void) logInfo:(NSString* __nonnull) message;(void) logError:(NSString* __nonnull) message;(void) logVerbose:(NSString* __nonnull) message;(void) logWarning:(NSString* __nonnull) message;(void) logAudit:(NSString* __nonnull) message;(void) logDebug:(NSString* __nonnull) message;(void) log:(NSString* __nonnull) message level:(NRLogLevels)level;(void) logAll:(NSDictionary* __nonnull) dict;(void) logAttributes:(NSDictionary* __nonnull) dict;(void) logErrorObject:(NSError* __nonnull) error;
Swift
func logInfo(_ message: String)func logError(_ message: String)func logVerbose(_ message: String)func logWarning(_ message: String)func logAudit(_ message: String)func logDebug(_ message: String)func log(_ message: String, level: NRLogLevels)func logAll(_ dict: [String: Any])func logAttributes(_ dict: [String: Any])func logErrorObject(_ error: NSError)
Example
Objective-c
[NewRelic logInfo:@"This is an info message"];
[NewRelic logError:@"This is an error message"];
[NewRelic logVerbose:@"This is a verbose message"];
[NewRelic logWarning:@"This is a warning message"];
[NewRelic logAudit:@"This is an audit message"];
[NewRelic logDebug:@"This is a debug message"];
[NewRelic log:@"This is a custom log level message" level:NRLogLevelsCustom];
NSDictionary *logDict = @{@"key1": @"value1", @"key2": @"value2"};[NewRelic logAll:logDict];
NSDictionary *attributesDict = @{@"attribute1": @"value1", @"attribute2": @"value2"};[NewRelic logAttributes:attributesDict];
NSError *error = [NSError errorWithDomain:@"com.example" code:100 userInfo:@{NSLocalizedDescriptionKey: @"This is an error description"}];[NewRelic logErrorObject:error];
Swift
NewRelic.logError("Encountered error=error=\(error.localizedDescription).")
NewRelic.logWarning("Warning text.")
NewRelic.logInfo("Info text.")
NewRelic.logVerbose("NewRelic.start was called.")
NewRelic.logDebug("Debug text.")
do { try errorMethod()} catch { NewRelic.logErrorObject(error)}
NewRelic.logAll([ "logLevel": "WARN", "message": "This is a test message for the New Relic logging system."])
NewRelic.logAttributes([ "logLevel": "WARN", "message": "This is a test message for the New Relic logging system.", "additionalAttribute1": "attribute1", "additionalAttribute2": "attribute2"])
Syntax
NewRelicCapacitorPlugin.logInfo(options: { message: string}) => void
NewRelicCapacitorPlugin.logVerbose(options: { message: string}) => void
NewRelicCapacitorPlugin.logError(options: { message: string}) => void
NewRelicCapacitorPlugin.logWarn(options: { message: string}) => void
NewRelicCapacitorPlugin.logDebug(options: { message: string}) => void
NewRelicCapacitorPlugin.logAll(options: { error: string; attributes: object; }): void
NewRelicCapacitorPlugin.logAttributes(options: { attributes: object; }): void
Example
NewRelicCapacitorPlugin.logInfo({message: "User profile loaded successfully"});
NewRelicCapacitorPlugin.logVerbose({message:"Verbose logging example"});
NewRelicCapacitorPlugin.logError({message:"Error loading user profile"});
NewRelicCapacitorPlugin.logWarn({message: "Low disk space warning"});
NewRelicCapacitorPlugin.logDebug({message:"Debugging session started"});
NewRelicCapacitorPlugin.logAll({ error: "UnexpectedError", attributes: { "errorCode": "500", "errorMessage": "Internal Server Error" ,level:"WARN"}});
NewRelicCapacitorPlugin.logAttributes({attributes:{ "userID": 12345, "sessionID": "abcde12345", "isLoggedIn": true, "message":"this is test", "level":"INFO"}});
Syntax
NewRelic.logInfo(message: string): void;
NewRelic.logDebug(message: string): void;
NewRelic.logVerbose(message: string): void;
NewRelic.logWarn(message: string): void;
NewRelic.logError(message: string): void;
NewRelic.log(level: string, message: string): void;
NewRelic.logAttributes(attributes: {[key: string]: boolean | number | string}): void;
Example
NewRelic.logInfo("User logged in successfully");
NewRelic.logDebug("Debug message");
NewRelic.logVerbose("Verbose message detailing step-by-step execution");
NewRelic.logWarn("Warning message indicating a potential issue");
NewRelic.logError("Error message indicating a failure");
NewRelic.log("INFO", "User logged in successfully");
NewRelic.logAttributes({ "userID": 12345, "sessionID": "abcde12345", "isLoggedIn": true, "message":"this is test", "level":"INFO"});
Syntax
CrossNewRelic.Current.LogInfo(String message) : void
CrossNewRelic.Current.LogError(String message) : void
CrossNewRelic.Current.LogVerbose(String message) : void
CrossNewRelic.Current.LogWarning(String message) : void
CrossNewRelic.Current.LogDebug(String message) : void
CrossNewRelic.Current.Log(LogLevel level, String message) : void
CrossNewRelic.Current.LogAttributes(Dictionary<string, object> attributes) : void
Example
CrossNewRelic.Current.LogInfo("This is an informational message");
CrossNewRelic.Current.LogError("This is an error message");
CrossNewRelic.Current.LogVerbose("This is a verbose message");
CrossNewRelic.Current.LogWarning("This is a warning message");
CrossNewRelic.Current.LogDebug("This is a debug message");
CrossNewRelic.Current.Log(LogLevel.Info, "This is an informational message");
CrossNewRelic.Current.LogAttributes(new Dictionary<string, object>() { { "level","info"}, { "BreadNumValue", 12.3 }, { "BreadStrValue", "MAUIBread" }, { "BreadBoolValue", true }, { "message", "This is a message with attributes" } });
Syntax
NewrelicMobile.instance.logInfo(String message) : void
NewrelicMobile.instance.logError(String message) : void
NewrelicMobile.instance.logVerbose(String message) : void
NewrelicMobile.instance.logWarning(String message) : void
NewrelicMobile.instance.logDebug(String message) : void
NewrelicMobile.instance.log(LogLevel level, String message) : void
NewrelicMobile.instance.logAll(Exception exception,Map<String, dynamic>? attributes) : void
NewrelicMobile.instance.logAttributes(Dictionary<string, object> attributes) : void
Example
NewrelicMobile.instance.logInfo("This is an informational message");
NewrelicMobile.instance.logError("This is an error message");
NewrelicMobile.instance.logVerbose("This is a verbose message");
NewrelicMobile.instance.logWarning("This is a warning message");
NewrelicMobile.instance.logDebug("This is a debug message");
NewrelicMobile.instance.log(LogLevel.Info, "This is an informational message");
NewrelicMobile.instance.logAll(Exception("This is an exception"), { "BreadNumValue": 12.3, "BreadStrValue": "FlutterBread", "BreadBoolValue": true, "message": "This is a message with attributes", "level":"info"});
NewrelicMobile.instance.logAttributes({ "BreadNumValue": 12.3, "BreadStrValue": "FlutterBread", "BreadBoolValue": true, "message": "This is a message with attributes", "level":"info"});
Syntax
NewRelic.logInfo(String message) : void
NewRelic.logError(String message) : void
NewRelic.logVerbose(String message) : void
NewRelic.logWarning(String message) : void
NewRelic.logDebug(String message) : void
NewRelic.log(LogLevel level, String message) : void
NewRelic.logAll(Error error,attributes?: {[key: string]: any}) : void
NewRelic.logAttributes(attributes?: {[key: string]: any}) : void
Example
NewRelic.logInfo();
NewRelic.logError("This is an error message");
NewRelic.logVerbose("This is a verbose message");
NewRelic.logWarning("This is a warning message");
NewRelic.logDebug("This is a debug message");
NewRelic.log(LogLevel.INFO, "This is an informational message");
Newrelic.logAll(new Error("This is an exception"), { BreadNumValue: 12.3, BreadStrValue: "FlutterBread", BreadBoolValue: true, message: "This is a message with attributes",});
Newrelic.logAttributes({ BreadNumValue: 12.3, BreadStrValue: "FlutterBread", BreadBoolValue: true, message: "This is a message with attributes", level: newRelic.LogLevel.INFO,});
Syntax
CrossNewRelicClient.Current.LogInfo(String message) : void
CrossNewRelicClient.Current.LogError(String message) : void
CrossNewRelicClient.Current.LogVerbose(String message) : void
CrossNewRelicClient.Current.LogWarning(String message) : void
CrossNewRelicClient.Current.LogDebug(String message) : void
CrossNewRelicClient.Current.Log(LogLevel level, String message) : void
CrossNewRelicClient.Current.LogAttributes(Dictionary<string, object> attributes) : void
Example
CrossNewRelicClient.Current.LogInfo("This is an informational message");
CrossNewRelicClient.Current.LogError("This is an error message");
CrossNewRelicClient.Current.LogVerbose("This is a verbose message");
CrossNewRelicClient.Current.LogWarning("This is a warning message");
CrossNewRelicClient.Current.LogDebug("This is a debug message");
CrossNewRelicClient.Current.Log(LogLevel.Info, "This is an informational message");
CrossNewRelicClient.Current.LogAttributes(new Dictionary<string, object>() { {"level", "info"}, { "BreadNumValue", 12.3 }, { "BreadStrValue", "XamBread" }, { "BreadBoolValue", true }, { "message", "This is a message with attributes" } });
Syntax
NewRelicAgent.LogInfo(String message) : void
NewRelicAgent.LogError(String message) : void
NewRelicAgent.LogVerbose(String message) : void
NewRelicAgent.LogWarning(String message) : void
NewRelicAgent.LogDebug(String message) : void
NewRelicAgent.Log(LogLevel level, String message) : void
NewRelicAgent.LogAttributes(Dictionary<string, object> attributes) : void
Example
NewRelicAgent.LogInfo("This is an informational message");
NewRelicAgent.LogError("This is an error message");
NewRelicAgent.LogVerbose("This is a verbose message");
NewRelicAgent.LogWarning("This is a warning message");
NewRelicAgent.LogDebug("This is a debug message");
NewRelicAgent.Log(LogLevel.Info, "This is an informational message");
NewRelicAgent.LogAttributes(new Dictionary<string, object>() { {"level", "info"}, {"BreadNumValue", 12.3 }, {"BreadStrValue", "UnityBread" }, {"BreadBoolValue", true }, {"message", "This is a message with attributes" } } );
Syntax
UNewRelicBPLibrary::logInfo(FString message) : void
UNewRelicBPLibrary::logError(FString message) : void
UNewRelicBPLibrary::logVerbose(FString message) : void
UNewRelicBPLibrary::logWarning(FString message) : void
UNewRelicBPLibrary::logDebug(FString message) : void
UNewRelicBPLibrary::log(AgentLogLevel level, FString message) : void
UNewRelicBPLibrary::logAttributes(TMap <FString, FString> attributes) : void
Example
#include "NewRelicBPLibrary.h"
UNewRelicBPLibrary::logInfo("This is an informational message");
UNewRelicBPLibrary::logError("This is an error message");
UNewRelicBPLibrary::logVerbose("This is a verbose message");
UNewRelicBPLibrary::logDebug("This is a debug message");
UNewRelicBPLibrary::logWarning("This is a warning message");
UNewRelicBPLibrary::log(AgentLogLevel::Debug, "This is a debug message");
TMap<FString, FString> attributes;attributes.Add("place", TEXT("Robots"));attributes.Add("user", TEXT("user1"));attributes.Add("level", TEXT("DEBUG"));attributes.Add("message", TEXT("This is a debug message"));
UNewRelicBPLibrary::logAttributes(attributes);