using System;
using System.Runtime.CompilerServices;

namespace Aitex.Core.RT.Log
{
	/// <summary>
	/// 日志系统接口。
	/// </summary>
	public interface ICommonLog
	{
        /// <summary>
        /// 输出调试日志。
        /// </summary>
        /// <param name="message">日志内容。</param>
        /// <param name="member">输出日志的方法名。</param>
        /// <param name="line">输出日志的源代码行号。</param>
        /// <param name="file">输入日志的源代码文件名。</param>
        void Debug(string message, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0);

        /// <summary>
        /// 输出普通日志。
        /// </summary>
        /// <param name="message">日志内容。</param>
        /// <param name="isTraceOn">是否跟踪调用堆栈。</param>
        /// <param name="stackFile">产生日志的源文件名称。</param>
        void Info(string message, bool isTraceOn, string stackFile);

        /// <summary>
        /// 输出报警日志。
        /// </summary>
        /// <param name="message">日志内容。</param>
        /// <param name="stackFile">产生日志的源文件名称。</param>
        void Warning(string message, string stackFile);

        /// <summary>
        /// 输出报警日志。
        /// </summary>
        /// <param name="message">日志内容。</param>
        /// <param name="ex">异常对象实例。</param>
        /// <param name="stackFile">产生日志的源文件名称。</param>
        void Warning(string message, Exception ex, string stackFile);

        /// <summary>
        /// 输出错误日志。
        /// </summary>
        /// <param name="message">日志内容。</param>
        /// <param name="stackFile">产生日志的源文件名称。</param>
        void Error(string message, string stackFile);

        /// <summary>
        /// 输出错误日志。
        /// </summary>
        /// <param name="message">日志内容。</param>
        /// <param name="ex">异常对象实例。</param>
        /// <param name="stackFile">产生日志的源文件名称。</param>
        void Error(string message, Exception ex, string stackFile);
	}
}
