public Logger()
        {
            var time     = DateTime.Now;
            var filetime = time.ToString("yyyyMMdd_HHmmss");

            outfilepath  = "log/log_" + filetime + ".log";
            otherLogger  = null;
            outtag_info  = OUTPosition.Console;
            outtag_warn  = OUTPosition.Console | OUTPosition.Trace | OUTPosition.File;
            outtag_error = OUTPosition.Console | OUTPosition.Trace | OUTPosition.File;
        }
        void WriteLine(LogType type, OUTPosition outtag, string str)
        {
            string tag = null;

            if ((outtag & OUTPosition.Console) > 0)
            {
                if (tag == null)
                {
                    if (type == LogType.Info)
                    {
                        Console.ForegroundColor = ConsoleColor.Gray;
                    }
                    else if (type == LogType.Warn)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                    }
                    else if (type == LogType.Error)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                    }
                }
                //Console.Write(tag);
                Console.WriteLine(str);

                Console.ForegroundColor = ConsoleColor.Gray;
            }
            if ((outtag & OUTPosition.Trace) > 0)
            {
                if (tag == null)
                {
                    if (type == LogType.Info)
                    {
                        tag = "<I>";
                    }
                    else if (type == LogType.Warn)
                    {
                        tag = "<W>";
                    }
                    else if (type == LogType.Error)
                    {
                        tag = "<E>";
                    }
                }
                System.Diagnostics.Trace.Write(tag);
                System.Diagnostics.Trace.WriteLine(str);
            }
            if ((outtag & OUTPosition.Debug) > 0)
            {
                if (tag == null)
                {
                    if (type == LogType.Info)
                    {
                        tag = "<I>";
                    }
                    else if (type == LogType.Warn)
                    {
                        tag = "<W>";
                    }
                    else if (type == LogType.Error)
                    {
                        tag = "<E>";
                    }
                }
                System.Diagnostics.Debug.Write(tag);
                System.Diagnostics.Debug.WriteLine(str);
            }
            lock (this)
            {
                if ((outtag & OUTPosition.File) > 0)
                {
                    try
                    {
                        System.IO.File.AppendAllText(outfilepath, tag + str + "\n", System.Text.Encoding.UTF8);
                    }
                    catch
                    {
                        Console.Write("<LOG ERROR>cant write to file:" + outfilepath + "=" + str);
                    }
                }
            }
            if (otherLogger != null && (outtag_info & OUTPosition.Other) > 0)
            {
                try
                {
                    if (type == LogType.Info)
                    {
                        otherLogger.Info(str);
                    }
                    else if (type == LogType.Warn)
                    {
                        otherLogger.Warn(str);
                    }
                    else if (type == LogType.Error)
                    {
                        otherLogger.Error(str);
                    }
                }
                catch
                {
                    Console.Write("<LOG ERROR>cant write to otherLogger:" + str);
                }
            }
        }