自作Logger
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data;
namespace MyApp.Utility
{
<summary>
</summary>
public class Logger
{
#region 変数
TODO
<summary>
</summary>
private string logFolder = "log";
<summary>
</summary>
private string logFullPath = string.Empty;
<summary>
</summary>
private string outputFile = string.Empty;
TODO
<summary>
</summary>
<summary>
</summary>
private Level logLevel = Level.DEBUG;
<summary>
</summary>
private object locker = new object();
#endregion
#region 静的変数
<summary>
</summary>
private static Logger instance = new Logger();
#endregion
#region 定数
<summary>
</summary>
private const string FILE_HEAD = "app";
<summary>
</summary>
private const string EXTENTION = ".log";
#endregion
#region 列挙体
<summary>
</summary>
public enum Level
{
<summary>
</summary>
DEBUG = 0,
<summary>
</summary>
INFO = 1,
<summary>
</summary>
WARN = 2,
<summary>
</summary>
ERROR = 3,
<summary>
</summary>
FATAL = 4,
};
#endregion
#region メソッド
#region コンストラクタ
<summary>
</summary>
private Logger()
{
TODO
TODO
this.logFullPath = Path.Combine(Environment.CurrentDirectory, this.logFolder);
}
#endregion
#region ログレベル取得
<summary>
</summary>
<param name="argLogLevel"></param>
<returns></returns>
private Level GetLogLevel(string argLogLevel)
{
Level retLevel = Level.INFO;
foreach (Level lv in Enum.GetValues(typeof(Level)))
{
if (lv.ToString() == argLogLevel)
{
retLevel = lv;
break;
}
}
return retLevel;
}
#endregion
#region インスタンス取得
<summary>
</summary>
<returns></returns>
public static Logger GetInstance()
{
return instance;
}
#endregion
#region ログ出力
<summary>
</summary>
<param name="argApp"></param>
<param name="argLogLevel"></param>
<param name="argMessage"></param>
<returns></returns>
public bool Write(string argAppName, Level argLogLevel, string argMessage)
{
bool result = true;
if (!this.MakeLog(argAppName, argLogLevel, argMessage))
{
result = false;
}
return result;
}
#endregion
#region ログ作成
<summary>
</summary>
<param name="argAppName"></param>
<param name="argLevel"></param>
<param name="argMessage"></param>
<returns></returns>
private bool MakeLog(string argAppName, Level argLevel, string argMessage)
{
if (argLevel < this.logLevel)
{
return true;
}
DateTime dateNow = DateTime.Now;
string strDate = dateNow.ToString("yyyy/MM/dd HH:mm:ss");
this.outputFile = FILE_HEAD + dateNow.ToString("yyyyMMdd") + EXTENTION;
if (!Directory.Exists(this.logFullPath))
{
Directory.CreateDirectory(this.logFullPath);
}
StringBuilder sb = new StringBuilder();
sb.Append(strDate);
sb.Append(" ");
sb.Append(argAppName);
sb.Append(",");
sb.Append(argLevel);
sb.Append(",");
sb.Append(argMessage);
try
{
this.WriteLog(sb.ToString());
}
catch
{
throw new Exception("ログファイルの出力異常発生");
}
return true;
}
#endregion
#region ログファイル出力
<summary>
</summary>
<param name="argMessage"></param>
private void WriteLog(string argMessage)
{
lock (locker)
{
using (FileStream fs = new FileStream(Path.Combine(this.logFullPath, this.outputFile), FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read))
{
using (StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("Shift_JIS")))
{
fs.Seek(0, SeekOrigin.End);
sw.WriteLine(argMessage);
sw.Flush();
fs.Flush();
}
}
}
}
#endregion
#endregion
}
}