로그 시스템¶
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());