Esempio n. 1
0
 public LogRecord(IResFile logFile, bool enabled, bool timeStampPrintable, bool enableConsole)
 {
     this.LogFile            = logFile;
     this.Enabled            = enabled;
     this.TimeStampPrintable = timeStampPrintable;
     this.EnableConsole      = enableConsole;
 }
Esempio n. 2
0
        /// <summary>
        /// ログ・ファイルに記録します。失敗しても無視します。
        /// </summary>
        /// <param name="line"></param>
        static void XLine(ILogRecord record, string level, string line, IResFile targetOrNull)
        {
            // ログ出力オフ
            if (!record.Enabled)
            {
                return;
            }

            // ログ追記
            try
            {
                StringBuilder sb = new StringBuilder();

                // タイムスタンプ
                if (record.TimeStampPrintable)
                {
                    sb.Append($"[{DateTime.Now.ToString()}] ");
                }

                sb.Append($"{level} {line}");
                sb.AppendLine();

                string message = sb.ToString();

                if (targetOrNull != null)
                {
                    System.IO.File.AppendAllText(targetOrNull.Name, message);
                }
                else
                {
                    System.IO.File.AppendAllText(record.LogFile.Name, message);
                }
            }
            catch (Exception)
            {
                //>>>>> エラーが起こりました。

                // どうにもできないので 無視します。
            }
        }
Esempio n. 3
0
 /// <summary>
 /// ファータル・レベル。
 /// </summary>
 /// <param name="line"></param>
 public static void Fatal(string line, IResFile targetOrNull = null)
 {
     Logger.XLine(FatalRecord, "Fatal", line, targetOrNull);
 }
Esempio n. 4
0
 /// <summary>
 /// エラー・レベル。
 /// </summary>
 /// <param name="line"></param>
 public static void Error(string line, IResFile targetOrNull = null)
 {
     Logger.XLine(ErrorRecord, "Error", line, targetOrNull);
 }
Esempio n. 5
0
 /// <summary>
 /// ワーン・レベル。
 /// </summary>
 /// <param name="line"></param>
 public static void Warn(string line, IResFile targetOrNull = null)
 {
     Logger.XLine(WarnRecord, "Warn", line, targetOrNull);
 }
Esempio n. 6
0
 /// <summary>
 /// ノティス・レベル。
 /// </summary>
 /// <param name="line"></param>
 public static void Notice(string line, IResFile targetOrNull = null)
 {
     Logger.XLine(NoticeRecord, "Notice", line, targetOrNull);
 }
Esempio n. 7
0
 /// <summary>
 /// インフォ・レベル。
 /// </summary>
 /// <param name="line"></param>
 public static void Info(string line, IResFile targetOrNull = null)
 {
     Logger.XLine(InfoRecord, "Info", line, targetOrNull);
 }
Esempio n. 8
0
 public static void Debug(string line, IResFile targetOrNull = null)
 {
     Logger.XLine(DebugRecord, "Debug", line, targetOrNull);
 }
Esempio n. 9
0
 /// <summary>
 /// テキストをそのまま、ファイルへ出力するためのものです。
 /// </summary>
 /// <param name="path"></param>
 /// <param name="contents"></param>
 public static void WriteFile(IResFile logFile, string contents)
 {
     File.WriteAllText(logFile.Name, contents);
 }
Esempio n. 10
0
        /// <summary>
        /// バッファーに溜まっているログを吐き出します。
        /// </summary>
        static void XWrite(ILogRecord record, string level, string message, bool echo, IResFile targetOrNull)
        {
            if (0 < message.Length)
            {
                if (echo)
                {
                    // コンソールに表示
                    System.Console.Out.Write(message);
                }

                // ログの書き込み
                // _1 ~ _10 等のファイル名末尾を付けて、ログをローテーションするぜ☆(^▽^)
                string bestFile;
                {
                    int      maxFileSize       = Util_Machine.LogFileSaidaiYoryo;
                    int      maxFileCount      = Util_Machine.LogFileBunkatsuSu;
                    long     newestFileSize    = 0;
                    int      oldestFileIndex   = -1;
                    DateTime oldestFileTime    = DateTime.MaxValue;
                    int      newestFileIndex   = -1;
                    DateTime newestFileTime    = DateTime.MinValue;
                    int      noExistsFileIndex = -1;
                    int      existFileCount    = 0;
                    // まず、ログファイルがあるか、N個確認するぜ☆(^▽^)
                    for (int i = 0; i < maxFileCount; i++)
                    {
                        string file = Logger.NumberedLogFilePath(i);

                        // ファイルがあるか☆
                        if (File.Exists(file))
                        {
                            FileInfo fi       = new FileInfo(file);
                            DateTime fileTime = fi.LastWriteTimeUtc;

                            if (fileTime < oldestFileTime)
                            {
                                oldestFileIndex = i;
                                oldestFileTime  = fileTime;
                            }

                            if (newestFileTime < fileTime)
                            {
                                newestFileIndex = i;
                                newestFileTime  = fileTime;
                                newestFileSize  = fi.Length;
                            }

                            existFileCount++;
                        }
                        else if (-1 == noExistsFileIndex)
                        {
                            noExistsFileIndex = i;
                        }
                    }

                    if (existFileCount < 1)
                    {
                        // ログ・ファイルが1つも無ければ、新規作成するぜ☆(^▽^)
                        Logger.LogDirectoryToExists();

                        bestFile = Logger.NumberedLogFilePath(0); // 番号は 1 足される。

                        FileStream fs = File.Create(bestFile);
                        fs.Close(); // File.Create したあとは、必ず Close() しないと、ロックがかかったままになる☆(^▽^)
                    }
                    else
                    {
                        // ファイルがある場合は、一番新しいファイルに書き足すぜ☆(^▽^)

                        bestFile = Logger.NumberedLogFilePath(newestFileIndex);
                        // 一番新しいファイルのサイズが n バイト を超えている場合は、
                        // 新しいファイルを新規作成するぜ☆(^▽^)
                        if (maxFileSize < newestFileSize) // n バイト以上なら
                        {
                            if (maxFileCount <= existFileCount)
                            {
                                // ファイルが全部ある場合は、一番古いファイルを消して、一から書き込むぜ☆
                                bestFile = Logger.NumberedLogFilePath(oldestFileIndex);
                                File.Delete(bestFile);

                                FileStream fs = File.Create(bestFile);
                                fs.Close(); // File.Create したあとは、必ず Close() しないと、ロックがかかったままになる☆(^▽^)
                            }
                            else
                            {
                                // まだ作っていないファイルを作って、書き込むぜ☆(^▽^)
                                bestFile = Logger.NumberedLogFilePath(noExistsFileIndex);

                                FileStream fs = File.Create(bestFile);
                                fs.Close(); // File.Create したあとは、必ず Close() しないと、ロックがかかったままになる☆(^▽^)
                            }
                        }
                    }
                }

                for (int retry = 0; retry < 2; retry++)
                {
                    try
                    {
                        System.IO.File.AppendAllText(bestFile, message);
                        break;
                    }
                    catch (Exception)
                    {
                        if (0 == retry)
                        {
                            // 書き込みに失敗することもあるぜ☆(^~^)
                            // 10秒待機して 再挑戦しようぜ☆(^▽^)
                            // Trace("ログ書き込み失敗、10秒待機☆");
                            // フラッシュは、できないぜ☆(^▽^)この関数だぜ☆(^▽^)wwww
                            System.Threading.Thread.Sleep(10000);
                        }
                        else
                        {
                            // 無理☆(^▽^)www
                            throw;
                        }
                    }
                }
                // ログ書き出し、ここまで☆(^▽^)
                // Buf.Clear();
            }
        }
Esempio n. 11
0
 public static void Trace(string line, IResFile targetOrNull = null)
 {
     Logger.XWrite(TraceRecord, "Trace", line, Echo, targetOrNull);
 }
Esempio n. 12
0
 /// <summary>
 /// テキストをそのまま、ファイルへ出力するためのものです。
 /// </summary>
 /// <param name="path"></param>
 /// <param name="contents"></param>
 public static void WriteFile(IResFile logFile, string contents)
 {
     File.WriteAllText(logFile.Name, contents);
     // MessageBox.Show($a"ファイルを出力しました。
     //{path}");
 }