Log 구성¶
Windows SDK의 Log는 독립적인 영속 큐를 사용하며 Logging Intake로 업로드됩니다. C#과 Native C/C++는 샘플링, 레벨 필터링, RUM 연동 및 큐 의미 체계를 공유합니다. 애플리케이션이 Log API를 명시적으로 호출하여 기록한 비즈니스 로그만 이 업로드 체인에 진입합니다.
Log 초기화 구성¶
GuanceSdk.Init(new GuanceConfig
{
DatawayUrl = "https://openway.guance.com",
ClientToken = "<client-token>",
RumAppId = "<rum-app-id>",
Logging = new LogConfig
{
EnableCustomLog = true,
EnableLinkRumData = true,
SampleRate = 1.0,
LevelFilters = new[]
{
LogStatus.Info,
LogStatus.Warning,
LogStatus.Error,
LogStatus.Critical
},
GlobalContext = new Dictionary<string, object?>
{
["component"] = "desktop-ui"
}
}
});
C# 매개변수¶
| 매개변수 | 기본값 | 설명 |
|---|---|---|
EnableCustomLog |
false |
사용자 정의 Log 허용 여부. 비활성화 시 AddLog()가 큐에 추가되지 않습니다. |
EnableLinkRumData |
false |
현재 RUM Session, View 및 Action 연동 여부. |
SampleRate |
1.0 |
Log 독립 샘플링 비율, 범위 0.0~1.0. |
LevelFilters |
null |
수집 허용 표준 Log 레벨. null은 레벨별 필터링을 하지 않음을 의미합니다. |
GlobalContext |
빈 사전 | 각 Log에 추가되는 전역 속성. |
DiscardStrategy |
DiscardNew |
큐가 가득 찼을 때 새 데이터 또는 가장 오래된 데이터를 폐기합니다. |
guance_log_property global_context[] = {
{"component", "native-ui"}
};
guance_log_config logging;
guance_log_config_init(&logging);
logging.enable_custom_log = 1;
logging.enable_link_rum_data = 1;
logging.sample_rate = 1.0;
logging.level_filter_mask =
GUANCE_LOG_INFO |
GUANCE_LOG_WARNING |
GUANCE_LOG_ERROR |
GUANCE_LOG_CRITICAL;
logging.global_context = global_context;
logging.global_context_count = 1;
if (!guance_log_configure(rum, &logging)) {
// 구성이 잘못되어 Log가 활성화되지 않았습니다.
}
Native C/C++ 매개변수¶
모든 버전화된 구조체는 먼저 guance_log_config_init()을 호출해야 합니다.
| 필드 | 기본값 | 설명 |
|---|---|---|
enable_custom_log |
0 |
사용자 정의 Log 허용 여부. |
enable_link_rum_data |
0 |
현재 RUM 컨텍스트 연동 여부. |
sample_rate |
1.0 |
Log 독립 샘플링 비율, 범위 0.0~1.0. |
level_filter_mask |
0 |
표준 레벨 비트 마스크. 0은 표준 레벨과 사용자 정의 상태를 모두 허용합니다. |
global_context |
NULL |
guance_log_property 배열. 구성 시 문자열이 동기적으로 복사됩니다. |
global_context_count |
0 |
전역 속성 개수, 최대 1024. |
discard_strategy |
GUANCE_LOG_DISCARD_NEW |
큐가 가득 찼을 때 새 데이터 또는 가장 오래된 데이터를 폐기합니다. |
Log, RUM 및 Session Replay는 SDK 디스크 캐시 상한을 공유하며, 캐시 용량, 파일 수 및 배치 크기는 SDK 초기화를 통해 통합 구성됩니다.
Logger 로그 출력¶
지원되는 표준 상태는 debug, info, warning, error, critical 및 ok입니다.
단일 Log 내용은 최대 30 KiB UTF-8 데이터로 제한되며, 초과 시 문자 경계에서 잘립니다. 속성에는 Token, 인증 Header, Cookie 또는 사용자 민감 정보가 포함되어서는 안 됩니다.
RUM 연동¶
Log의 RUM 연동을 활성화하면 SDK가 현재 session_id, view_id 및 action_id를 Log에 기록합니다. 연동은 Log 기록 시점의 활성 컨텍스트만 사용하며, 이미 큐에 추가된 데이터를 수정하지 않습니다.
큐와 진단¶
Log와 RUM은 독립적인 큐와 업로드 카운터를 사용합니다. Flush 및 정상 종료는 두 큐를 모두 처리합니다.
var diagnostics = GuanceSdk.GetLogDiagnosticsSnapshot();
Console.WriteLine(
$"enqueued={diagnostics.LogsEnqueued}, " +
$"droppedByConfig={diagnostics.LogsDroppedByConfiguration}, " +
$"droppedBySampling={diagnostics.LogsDroppedBySampling}, " +
$"droppedByLevel={diagnostics.LogsDroppedByLevel}, " +
$"droppedByCapacity={diagnostics.LogsDroppedByCapacity}, " +
$"uploaded={diagnostics.UploadSuccessCount}, " +
$"lastError={diagnostics.LastUploadError}");
guance_log_diagnostics diagnostics;
guance_log_diagnostics_init(&diagnostics);
if (guance_log_get_diagnostics(rum, &diagnostics)) {
printf("enqueued=%lld dropped=%lld uploaded=%lld\n",
static_cast<long long>(diagnostics.logs_enqueued),
static_cast<long long>(diagnostics.logs_dropped),
static_cast<long long>(diagnostics.upload_success_count));
}