- PR -

WEBアプリケーションで自由にログを出力したい

投稿者投稿内容
naomix
ベテラン
会議室デビュー日: 2003/02/01
投稿数: 56
投稿日時: 2003-12-27 16:08
なちゃ様。どうもありがとうございます。

こんな感じでしょうか。Singletonパターンで作ってみました。
なちゃさんの言わんとしていることとは違っているかもしれません。
冗長になりますが、
VS.NETで作った分離コードをほぼそのまま載せます。
(using〜は省略)
コード:
namespace WebTest
{
    public class Log
    {
        private static Log UniqueLog;
        private string LogFolder;

        private Log(string logFolder)
        {
            LogFolder = logFolder;
        }

        public static Log GetInstance(string logFolder)
        {
            if (UniqueLog == null)
            {
                UniqueLog = new Log(logFolder);
            }
            return UniqueLog;
        }

        public bool WriteLine(string msg)
        {
            DateTime NowDt = DateTime.Now;//現在時刻取得
            string logFileName = LogFolder + "WEB" + NowDt.ToString("yyyyMMdd") + ".log";

            if(Monitor.TryEnter (this, new TimeSpan(0,0,5)))
            {
                try
                {
                    using (StreamWriter writer = new StreamWriter(logFileName, true, Encoding.GetEncoding("Shift_JIS"))) 
                    {
                        writer.WriteLine(String.Format("{0:HH:mm:ss}, {1}: {2}", NowDt, msg, "TestB その1"));
                        Thread.Sleep(10000);//実験用
                        writer.WriteLine(String.Format("{0:HH:mm:ss}, {1}: {2}", DateTime.Now, msg, "TestB その2"));
                    }
                }
                finally
                {
                    Monitor.Exit(this);
                }
                return true;
            }
            else
                return false;
        }
    }

    /// <summary>
    /// TestB の概要の説明です。
    /// </summary>
    public class TestB : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Label Label1;
    
        private void Page_Load(object sender, System.EventArgs e)
        {
            if (Log.GetInstance(@"G:\MyData\VSWebProjects\WebTest\").WriteLine (Request.Url.AbsolutePath))
                Label1.Text = "書ける";
            else
                Label1.Text = "書けない";
        }

        #region Web フォーム デザイナで生成されたコード 
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: この呼び出しは、ASP.NET Web フォーム デザイナで必要です。
            //
            InitializeComponent();
            base.OnInit(e);
        }
        
        /// <summary>
        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディタで変更しないでください。
        /// </summary>
        private void InitializeComponent()
        {    
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion
    }
}


スキルアップ/キャリアアップ(JOB@IT)