【c#】ログファイルを出力するクラスを作りました。

C#

ログファイルを作るクラスを作りましたので紹介します。
Windowsフォームアプリケーション(.NET Framework)で開発を行っている方を想定しています。

クラスの仕様

コンストラクター

クラスに実装されている各種コンストラクターを紹介します。

Log()

プロパティを設定せずインスタンス化を行います。パラメーターはありません。
下記のように使用します。

FileConnect.Log log = new FileConnect.Log();

Log(string fileName, Boolean isAppend, Encoding encoding)

ファイル名、追記モード/上書きモード、エンコーディングを指定してインスタンス化を行います。
パラメーターは下記となります。

  • fileName : String型です。書き込みを行うファイル名を絶対パスで指定します。
  • isAppend : Boolean型です。ファイルに対し追記するか上書きするかを制御します。trueは追記、falseは上書きとなります。
  • encoding : Encoding型です。書き込みの際に扱うエンコーディングを指定します。

下記のように使用します。

FileConnect.Log log = new FileConnect.Log(@"D:\Log\" + DateTime.Now.ToString("yyyyMMdd-HHmmss")+".log", true, Encoding.UTF8);

プロパティ

クラスに実装されているプロパティを紹介します。

  • FileName : String型です。書き込みを行うファイル名を絶対パスで指定します。
  • IsAppend : Boolean型です。ファイルに対し追記するか上書きするかを制御します。true:追記、false:上書き。
  • Encoding : Encoding型です。書き込みの際に扱うエンコーディングを指定します。

下記のように設定します。

FileConnect.Log log = new FileConnect.Log();
log.FileName = @"D:\Log\" + DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".log";
log.IsAppend = false;
log.Encoding = Encoding.ASCII;

メソッド

クラスに実装されているメソッドを紹介します。

void Write(string format, params object[] args)

ファイルに文字列を書き込みます。
パラメーターは下記となります。

  • format : string型です。フォーマットを指定します。
  • args : object型の可変長引数です。Formatパラメーター内にエスケープ文字を入れた場合はそれに対応する値を指定します。

戻り値はありません。

下記のように使用します。

FileConnect.Log log = new FileConnect.Log(@"D:\Log\" + DateTime.Now.ToString("yyyyMMdd-HHmmss")+".log", true, Encoding.UTF8);
log.Write("This is test. ");
log.Write("Format test1 Value1:{0} Value2:{1}. ", 10, 11);
object[] value = new object[2];
value[0] = 12;
value[1] = 13;
log.Write("Format test2 Value1:{0} Value2:{1}. ", value);

上記のコードを実行するとファイルには下記のように書き込まれます。

This is test. Format test1 Value1:10 Value2:11. Format test2 Value1:12 Value2:13. 

void WriteLine(string format, params object[] args)

ファイルに行単位で文字列を書き込みます。
パラメーターは下記となります。

  • format : string型です。フォーマットを指定します。
  • args : object型の可変長引数です。Formatパラメーター内にエスケープ文字を入れた場合はそれに対応する値を指定します。

戻り値はありません。
下記のように使用します。

FileConnect.Log log = new FileConnect.Log();
log.FileName = @"D:\Log\" + DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".log";
log.IsAppend = true;
log.Encoding = Encoding.ASCII;
log.WriteLine("This is test. ");
log.WriteLine("Format test1 Value1:{0} Value2:{1}. ", 14, 15);
object[] value = new object[2];
value[0] = 16;
value[1] = 17;
log.WriteLine("Format test2 Value1:{0} Value2:{1}. ", value);

上記のコードを実行するとファイルには下記のように書き込まれます。

This is test. 
Format test1 Value1:14 Value2:15. 
Format test2 Value1:16 Value2:17. 

void FileOpen()

FileNameプロパティに設定したファイルを起動します。
パラメーター及び戻り値はありません。

※お使いのウイルスセキュリティソフトが有効になっている場合、ファイルを起動すると削除されることがあります。この場合はウイルスセキュリティソフトの設定を一部解除しておく必要があります。

下記のように使用します。

FileConnect.Log log = new FileConnect.Log();
log.FileName = @"D:\Log\" + DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".log";
log.IsAppend = true;
log.Encoding = Encoding.ASCII;
log.WriteLine("This is test. ");

log.FileOpen();

上記のコードを実行すると下記のように書き込んだファイルを起動します。

クラスの内容

上記で紹介したクラスのソースコードを紹介します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FileConnect
{
    public class Log
    {
        private string _fileName; //ファイル名(絶対パスで指定する)
        private Boolean _isAppend; //true:追記モード、false:上書きモード(Writeメソッド、WriteLineメソッドで使用する)
        private Encoding _encoding; //エンコーディング

        /// <summary>
        /// インスタンス化を行います。
        /// </summary>
        public Log()
        {

        }

        /// <summary>
        /// ファイル名、追記モード/上書きモード、エンコーディングを指定してインスタンス化を行います。
        /// </summary>
        /// <param name="fileName">ファイル名(絶対パスで指定する)</param>
        /// <param name="isAppend">true:追記モード、false:上書きモード</param>
        /// <param name="encoding">エンコーディング</param>
        public Log(string fileName, Boolean isAppend, Encoding encoding)
        {
            _fileName = fileName;
            _isAppend = isAppend;
            _encoding = encoding;
        }

        /// <summary>
        /// ファイル名を絶対パスで指定します。
        /// </summary>
        public string FileName
        {
            set { _fileName = value; }
        }

        /// <summary>
        /// 追記モード/上書きモードを指定します。true:追記モード、false:上書きモード
        /// </summary>
        public Boolean IsAppend
        {
            set { _isAppend = value; }
        }

        /// <summary>
        /// エンコーディングを指定します。
        /// </summary>
        public Encoding Encoding
        {
            set { _encoding = value; }
        }

        /// <summary>
        /// ファイルに文字列を書き込みます。
        /// </summary>
        /// <param name="format">フォーマット</param>
        /// <param name="args">フォーマットに適用する値(任意指定)</param>
        public void Write(string format, params object[] args)
        {

            System.IO.StreamWriter sw = new System.IO.StreamWriter(_fileName, _isAppend, _encoding);

            try
            {
                sw.Write(format, args);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                sw.Close();
            }

        }

        /// <summary>
        /// ファイルに行単位で文字列を書き込みます。
        /// </summary>
        /// <param name="format">フォーマット</param>
        /// <param name="args">フォーマットに適用する値(任意指定)</param>
        public void WriteLine(string format, params object[] args)
        {

            System.IO.StreamWriter sw = new System.IO.StreamWriter(_fileName, _isAppend, _encoding);

            try
            {
                sw.WriteLine(format, args);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                sw.Close();
            }

        }

        /// <summary>
        /// 書き込み中のファイルを起動します。
        /// </summary>
        public void FileOpen()
        {

            System.Diagnostics.Process prc = new System.Diagnostics.Process();

            prc.StartInfo.FileName = _fileName;
            prc.StartInfo.UseShellExecute = true;
            prc.Start();

        }

    }
}

以上となります。参考になれば幸いです。

タイトルとURLをコピーしました