- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- Administrator's Guide
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
Send logs to Datadog from your iOS applications with Datadog’s dd-sdk-ios
client-side logging library and leverage the following features:
The dd-sdk-ios
library supports all versions of iOS 11 or later.
To integrate using Apple’s Swift Package Manager, add the following as a dependency to your Package.swift
:
.package(url: "https://github.com/Datadog/dd-sdk-ios.git", .upToNextMajor(from: "2.0.0"))
In your project, link the following libraries:
DatadogCore
DatadogLogs
You can use CocoaPods to install dd-sdk-ios
:
pod 'DatadogCore'
pod 'DatadogLogs'
You can use Carthage to install dd-sdk-ios
:
github "DataDog/dd-sdk-ios"
In Xcode, link the following frameworks:
DatadogInternal.xcframework
DatadogCore.xcframework
DatadogLogs.xcframework
dd-sdk-ios
library as they would be exposed client-side in the iOS application IPA byte code.For more information about setting up a client token, see the client token documentation.
import DatadogCore
import DatadogLogs
Datadog.initialize(
with: Datadog.Configuration(
clientToken: "<client token>",
env: "<environment>",
service: "<service name>"
),
trackingConsent: trackingConsent
)
Logs.enable()
DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.service = @"<service name>";
[DDDatadog initializeWithConfiguration:configuration
trackingConsent:trackingConsent];
[DDLogs enable];
import DatadogCore
import DatadogLogs
Datadog.initialize(
with: Datadog.Configuration(
clientToken: "<client token>",
env: "<environment>",
site: .eu1,
service: "<service name>"
),
trackingConsent: trackingConsent
)
Logs.enable()
DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.service = @"<service name>";
configuration.site = [DDSite eu1];
[DDDatadog initializeWithConfiguration:configuration
trackingConsent:trackingConsent];
[DDLogs enable];
import DatadogCore
import DatadogLogs
Datadog.initialize(
with: Datadog.Configuration(
clientToken: "<client token>",
env: "<environment>",
site: .us3,
service: "<service name>"
),
trackingConsent: trackingConsent
)
Logs.enable()
@import DatadogObjc;
DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.service = @"<service name>";
configuration.site = [DDSite us3];
[DDDatadog initializeWithConfiguration:configuration
trackingConsent:trackingConsent];
[DDLogs enable];
import DatadogCore
import DatadogLogs
Datadog.initialize(
with: Datadog.Configuration(
clientToken: "<client token>",
env: "<environment>",
site: .us5,
service: "<service name>"
),
trackingConsent: trackingConsent
)
Logs.enable()
@import DatadogObjc;
DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.service = @"<service name>";
configuration.site = [DDSite us5];
[DDDatadog initializeWithConfiguration:configuration
trackingConsent:trackingConsent];
[DDLogs enable];
import DatadogCore
import DatadogLogs
Datadog.initialize(
with: Datadog.Configuration(
clientToken: "<client token>",
env: "<environment>",
site: .us1_fed,
service: "<service name>"
),
trackingConsent: trackingConsent
)
Logs.enable()
@import DatadogObjc;
DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.service = @"<service name>";
configuration.site = [DDSite us1_fed];
[DDDatadog initializeWithConfiguration:configuration
trackingConsent:trackingConsent];
[DDLogs enable];
import DatadogCore
import DatadogLogs
Datadog.initialize(
with: Datadog.Configuration(
clientToken: "<client token>",
env: "<environment>",
site: .ap1,
service: "<service name>"
),
trackingConsent: trackingConsent
)
Logs.enable()
@import DatadogObjc;
DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.service = @"<service name>";
configuration.site = [DDSite ap1];
[DDDatadog initializeWithConfiguration:configuration
trackingConsent:trackingConsent];
[DDLogs enable];
To be compliant with the GDPR regulation, the SDK requires the trackingConsent
value at initialization.
The trackingConsent
can be one of the following values:
.pending
: The SDK starts collecting and batching the data but does not send it to Datadog. The SDK waits for the new tracking consent value to decide what to do with the batched data..granted
: The SDK starts collecting the data and sends it to Datadog..notGranted
: The SDK does not collect any data: logs, traces, and RUM events are not sent to Datadog.To change the tracking consent value after the SDK is initialized, use the Datadog.set(trackingConsent:)
API call.
The SDK changes its behavior according to the new value. For example, if the current tracking consent is .pending
:
.granted
, the SDK send all current and future data to Datadog;.notGranted
, the SDK wipe all current data and stop collecting any future data.Before data is uploaded to Datadog, it is stored in cleartext in the cache directory (Library/Caches
) of your application sandbox. The cache directory cannot be read by any other app installed on the device.
When writing your application, enable development logs to log to console all internal messages in the SDK with a priority equal to or higher than the provided level.
Datadog.verbosityLevel = .debug
DDDatadog.verbosityLevel = DDSDKVerbosityLevelDebug;
Logger
:let logger = Logger.create(
with: Logger.Configuration(
name: "<logger name>",
networkInfoEnabled: true,
remoteLogThreshold: .info,
consoleLogFormat: .shortWith(prefix: "[iOS App] ")
)
)
DDLoggerConfiguration *configuration = [[DDLoggerConfiguration alloc] init];
configuration.networkInfoEnabled = YES;
configuration.remoteLogThreshold = [DDLogLevel info];
configuration.printLogsToConsole = YES;
DDLogger *logger = [DDLogger createWithConfiguration:configuration];
logger.debug("A debug message.")
logger.info("Some relevant information?")
logger.notice("Have you noticed?")
logger.warn("An important warning…")
logger.error("An error was met!")
logger.critical("Something critical happened!")
[logger debug:@"A debug message."];
[logger info:@"Some relevant information?"];
[logger notice:@"Have you noticed?"];
[logger warn:@"An important warning…"];
[logger error:@"An error was met!"];
[logger critical:@"Something critical happened!"];
Note: To add a custom iOS log to a newly created RUM view, apply it with the viewDidAppear
method. If the log is applied before viewDidAppear
occurs, such as at viewDidLoad
, the log is applied to the preceding RUM view, which is still technically the active view.
attributes
alongside your log message to add attributes to the emitted log. Each entry of the map is added as an attribute.logger.info("Clicked OK", attributes: ["context": "onboarding flow"])
[logger info:@"Clicked OK" attributes:@{@"context": @"onboarding flow"}];
The following methods in Logger.Configuration
can be used when initializing the logger to send logs to Datadog:
Method | Description |
---|---|
Logger.Configuration.networkInfoEnabled | Add network.client.* attributes to all logs. The data logged by default is: reachability (yes , no , maybe ), available_interfaces (wifi , cellular , and more), sim_carrier.name (for example: AT&T - US ), sim_carrier.technology (3G , LTE , and more) and sim_carrier.iso_country (for example: US ). |
Logger.Configuration.service | Set the value for the service standard attribute attached to all logs sent to Datadog. |
Logger.Configuration.consoleLogFormat | Send logs to the debugger console. |
Logger.Configuration.remoteSampleRate | Set the sample rate of logs sent to Datadog. |
Logger.Configuration.name | Set the value for the logger.name attribute attached to all logs sent to Datadog. |
Follow the methods below to add or remove tags and attributes to all logs sent by a given logger.
Use the addTag(withKey:value:)
method to add tags to all logs sent by a specific logger:
// This adds a tag "build_configuration:debug"
logger.addTag(withKey: "build_configuration", value: "debug")
[logger addTagWithKey:@"build_configuration" value:@"debug"];
The <TAG_VALUE>
must be a String
.
Use the removeTag(withKey:)
method to remove tags from all logs sent by a specific logger:
// This removes any tag starting with "build_configuration"
logger.removeTag(withKey: "build_configuration")
[logger removeTagWithKey:@"build_configuration"];
For more information, see Getting Started with Tags.
By default, the following attributes are added to all logs sent by a logger:
http.useragent
and its extracted device
and OS
propertiesnetwork.client.ip
and its extracted geographical properties (country
, city
)logger.version
, Datadog SDK versionlogger.thread_name
, (main
, background
)version
, client’s app version extracted from Info.plist
environment
, the environment name used to initialize the SDKUse the addAttribute(forKey:value:)
method to add a custom attribute to all logs sent by a specific logger:
// This adds an attribute "device-model" with a string value
logger.addAttribute(forKey: "device-model", value: UIDevice.current.model)
[logger addAttributeForKey:@"device-model" value:UIDevice.currentDevice.model];
The <ATTRIBUTE_VALUE>
can be anything conforming to Encodable
such as String
, Date
, custom Codable
data model, and more.
Use the removeAttribute(forKey:)
method to remove a custom attribute from all logs sent by a specific logger:
// This removes the attribute "device-model" from all further log send.
logger.removeAttribute(forKey: "device-model")
[logger removeAttributeForKey:@"device-model"];
추가 유용한 문서, 링크 및 기사: