로그 시스템

Strix에는 자체 로그 시스템이 있습니다. Strix 클래스는 이것을 이용하여 SDK 내부에서 일어나는 일을 기록합니다. Strix 로그 시스템을 사용하여 자체 스크립트의 이벤트를 기록해도 됩니다.

로그 시스템은 LogManager 싱글톤에서 제어합니다.

참고

Strix의 로그 클래스와 값 타입은 네임스페이스 SoftGear.Strix.Net.Logging에 있습니다. Strix 로그 시스템을 이용하기 위해서는 아래 using 디렉티브를 추가해야 합니다.

using SoftGear.Strix.Net.Logging;

로그 수준

개발과 디버깅 중에는 디버그 메시지의 로그 수준을 높이는 것이 좋을 수도 있습니다. 이를 위해서는 LogManager.Instance.Filter의 값을 바꿔야 합니다. 이것은 타입 Level의 이넘이며 이용 가능한 옵션(덜 심각한 것부터 심각한 것 순으로)은 다음과 같습니다.

이름

로그된 이벤트

TRACE

기능의 구체적 단계

DEBUG

오류 디버깅에 유용한 정보

INFO

일반 적용 행태 정보

WARNING

예상치 못한 행태

ERROR

치명적이지 않은 오류

FATAL

치명적인 오류

참고

다른 로그 시스템과 같이 Filter를 특정 로그 수준으로 설정하면 그것보다 더 심각한 이벤트는 모두 기록됩니다.

스크립트의 로그

SDK에서 나오는 메시지를 필터링할 수 있을 뿐만 아니라 Logger 클래스를 이용하여 자체 메시지를 출력할 수 있으며, 그것도 필터링됩니다. 로그의 속성에 따라 분류되는 몇 가지`Logger` 인스턴스가 있습니다. 자체 메시지를 로그하기 위해서는 먼저 알맞은 로거를 확보해야 합니다. 각 로거는 이름으로 식별하며, 다음과 같은 LogManager 메서드로 하나를 얻을 수 있습니다.

bool FindLogger(string name, out Logger logger)

다음과 같이 GetLoggers()를 호출하면 이용 가능한 로거를 찾을 수 있습니다.

var availableLoggerNames = LogManager.Instance.GetLoggers().Keys;

자체 스크립트에 유용한 로거는 대개 "StrixBehaviour"와 "StrixReplicator"입니다.

로거 레퍼런스를 받은 후에는 그것을 사용해서 로그에 메시지를 출력할 수 있습니다.

// 스트링
logger.Warning("Something bad happened.");

// 델리게이트
public string MyLoggingFunc()
{
    return "Something bad happened.";
}
logger.Warning(MyLoggingFunc);

Logger에는 Warning 외에도 이름이 이용 가능한 로그 수준에 맞는 메서드가 있습니다.

수준을 인수로 하는 Log 메서드를 사용해도 됩니다.

logger.Log(Level.WARNING, "Something bad happened");
logger.Log(Level.WARNING, MyLoggingFunc);

로그 수준 확인

Logger에는 특정 로그 수준이 현재 활성되어 있는지 확인하는 유용한 메서드도 있습니다.

bool IsLogEnabled(Level logLevel)
if (logger.IsLogEnabled(Level.DEBUG))
    foreach (var node in searchResult.Result.GetModelCollection())
        logger.Debug("Node " + node.GetUid() + " " + node.GetHost() + ":" + node.GetPort() + " " + node.GetProtocol() + " " + node.GetNodeType());