// ---------------------------------------------------------------------------
// BT.Framework
// ILogSink.cs — 외부 로그 수신자 인터페이스
// ---------------------------------------------------------------------------
using System;

namespace BurningTimes.Core.Util.Log
{
    /// <summary>
    /// 로그 이벤트를 외부로 전달할 때 사용하는 sink 인터페이스.
    /// 크래시 리포터·파일 로거·원격 서버 전송 등을 구현체로 등록할 수 있다.
    /// </summary>
    /// <remarks>
    /// 기존 <c>ErrorLogHookManager</c>의 역할을 인터페이스로 추상화한 형태다.
    /// <see cref="Log"/>는 등록된 모든 sink에 순차적으로 로그를 전달한다.
    /// sink 구현은 예외를 내부에서 삼켜야 하며(Log 본체로 재귀하지 않도록),
    /// 무거운 I/O는 비동기로 처리하도록 권장한다.
    /// </remarks>
    public interface ILogSink
    {
        /// <summary>
        /// 로그 이벤트가 발생했을 때 호출된다.
        /// </summary>
        /// <param name="level">로그 레벨.</param>
        /// <param name="category">로그 카테고리(프로젝트가 자유 정의).</param>
        /// <param name="message">포맷팅이 끝난 최종 메시지.</param>
        /// <param name="exception">예외 객체(없으면 <c>null</c>).</param>
        void Emit(LogLevel level, string category, string message, Exception exception);
    }
}
