using NLog;
using System;
using System.Diagnostics;

namespace NBConfigBuilder
{
    public static class Log
    {
        private static readonly Logger logger = LogManager.GetCurrentClassLogger();

        static Log()
        {
        }

        /// <summary>
        /// 记录信息级别的日志消息。
        /// </summary>
        /// <param name="msg">日志消息。</param>
        public static void Info(string msg)
        {
            logger.Info(msg);
        }

        /// <summary>
        /// 记录错误级别的日志消息，并附带调用栈信息。
        /// </summary>
        /// <param name="msg">日志消息。</param>
        public static void Error(string msg)
        {
            var st = new StackTrace(1, true);
            logger.Error($"{msg}\n{st}");
        }

        /// <summary>
        /// 记录异常的错误级别的日志消息，并附带调用栈信息。
        /// </summary>
        /// <param name="e">异常对象。</param>
        public static void Error(Exception e)
        {
            if (e.Data.Contains("StackTrace"))
            {
                logger.Error($"{e.Data["StackTrace"]}\n{e}");
                return;
            }

            var str = e.ToString();
            logger.Error(str);
        }

        /// <summary>
        /// 记录信息级别的格式化日志消息。
        /// </summary>
        /// <param name="message">日志消息模板。</param>
        /// <param name="args">格式化参数。</param>
        public static void Info(string message, params object[] args)
        {
            logger.Info(message, args);
        }

        /// <summary>
        /// 记录调试级别的日志消息。
        /// </summary>
        /// <param name="msg">日志消息。</param>
        public static void Debug(string msg)
        {
            logger.Debug(msg);
        }

        /// <summary>
        /// 记录警告级别的日志消息。
        /// </summary>
        /// <param name="msg">日志消息。</param>
        public static void Warn(string msg)
        {
            logger.Warn(msg);
        }

        /// <summary>
        /// 记录严重错误级别的日志消息。
        /// </summary>
        /// <param name="msg">日志消息。</param>
        public static void Fatal(string msg)
        {
            logger.Fatal(msg);
        }

        /// <summary>
        /// 记录异常的错误级别的日志消息。
        /// </summary>
        /// <param name="e">异常对象。</param>
        /// <param name="message">附加消息。</param>
        public static void Error(Exception e, string message)
        {
            logger.Error(e, message);
        }
    }
}