콘텐츠로 이동

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입니다.

GuanceSdk.AddLog(
    "saved settings",
    LogStatus.Info,
    new Dictionary<string, object?>
    {
        ["operation"] = "save"
    });

GuanceSdk.AddLogs(new[]
{
    new LogEntry("first", LogStatus.Info),
    new LogEntry("second", "audit")
});
guance_log_property properties[] = {
    {"operation", "save"}
};

guance_log_add(
    rum,
    "saved settings",
    "info",
    properties,
    1);

guance_log_entry entries[] = {
    {"first", "info", nullptr, 0},
    {"second", "audit", nullptr, 0}
};
const int accepted = guance_log_add_batch(rum, entries, 2);

개별 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));
}

문서 평가

이 페이지가 도움이 되었나요?