123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SharpCifs.Util.DbsHelper
- {
- public class Log
- {
- /// <summary>
- /// コンソールへのログ出力を行うか否か
- /// </summary>
- public static bool IsActive { get; set; } = false;
- public static void Out(string message)
- {
- if (!Log.IsActive
- || string.IsNullOrEmpty(message))
- return;
- var msg = DateTime.Now.ToString("HH:mm:ss.fff")
- + ": [ThID: "
- + System.Environment.CurrentManagedThreadId.ToString().PadLeft(3)
- + " "
- + message;
- Debug.WriteLine(msg);
- Console.WriteLine(msg);
- }
- /// <summary>
- /// 例外のログ出力を行う。
- /// </summary>
- /// <param name="ex"></param>
- public static void Out(Exception ex)
- {
- if (!Log.IsActive
- || ex == null)
- return;
- Log.Out($"{ex}");
- var message = Log.GetHighlighted(Log.GetErrorString(ex));
- Log.Out(message);
- }
- /// <summary>
- /// Cast string-arrary to Highlighted message
- /// 文字列配列を強調メッセージ形式文字列に変換する。
- /// </summary>
- /// <param name="messages"></param>
- /// <returns></returns>
- private static string GetHighlighted(params System.String[] messages)
- {
- var time = DateTime.Now;
- var list = new List<string>();
- list.Add("");
- list.Add("");
- list.Add(time.ToString("HH:mm:ss.fff") + ":");
- list.Add("##################################################");
- list.Add("#");
- foreach (string message in messages)
- {
- var lines = message.Replace("\r\n", "\n").Replace("\r", "\n").Trim('\n').Split('\n');
- foreach (var line in lines)
- {
- list.Add($"# {line}");
- }
- }
- list.Add("#");
- list.Add("##################################################");
- list.Add("");
- list.Add("");
- return string.Join("\r\n", list);
- }
- /// <summary>
- /// Get Formatted Exception-Info string-array
- /// 例外情報を整形した文字列配列を返す。
- /// </summary>
- /// <param name="ex"></param>
- /// <returns></returns>
- private static string[] GetErrorString(Exception ex)
- {
- var list = new List<string>();
- if (ex.Message != null)
- {
- list.Add(ex.Message ?? "");
- list.Add("");
- }
- if (ex.StackTrace != null)
- {
- list.AddRange(ex.StackTrace.Split(new string[] { "場所", "at " },
- StringSplitOptions.None)
- .AsEnumerable()
- .Select(row => "\r\nat " + row));
- }
- if (ex.InnerException != null)
- {
- //InnerExceptionを再帰取得する。
- list.Add("");
- list.Add("Inner Exception");
- list.AddRange(Log.GetErrorString(ex.InnerException));
- }
- return list.ToArray();
- }
- }
- }
|