ある関数で呼び出し時にログを反射して記録します。


別の参照:http://stackoverflow.com/questions/2405230/can-i-get-parameter-names-values-procedurally-from-the-currently-executing-funct
/// <summary>
        ///     
        /// </summary>
        /// <param name="mb"></param>
        /// <returns></returns>
        private static string MethodReflect(MethodBase mb)
        {
            string ReflectString = string.Empty;
            ReflectString = mb.Name;
            ReflectString += "(";
            ParameterInfo[] pars = mb.GetParameters();
            foreach (ParameterInfo par in pars)
            {
                if (par.Position != 0)
                {
                    ReflectString += ", ";
                }
                ReflectString += string.Format("{0} {1}", par.ParameterType.Name, par.Name);
            }
            ReflectString += ")";
            return ReflectString;
        }
呼び出しの例:
//   
            string ReflectString = MethodReflect(MethodBase.GetCurrentMethod());
ログ:
 /// <summary>
        ///     
        /// </summary>
        private readonly static Object Lok = new Object();

        /// <summary>
        ///     
        /// </summary>
        /// <param name="txt"></param>
        private static void Log(string Txt)
        {
            try
            {
                lock (Lok)
                {
                    string logDir = System.Configuration.ConfigurationManager.AppSettings["LogDir"];
                    string logPath = string.Format(@"{0}\Login", logDir);
                    string logFile = string.Format(@"{0}\LoginData.{1}.log", logPath, DateTime.Now.ToString(@"yy-MM-dd"));
                    //
                    string logContent = string.Format("{0}\t{1}\r
", DateTime.Now.ToString(@"HH:mm:ss"), Txt); System.IO.Directory.CreateDirectory(logPath); System.IO.File.AppendAllText(logFile, logContent); } } catch (System.Exception ex) { ex.ToString(); } }
デモ:
/// <summary>
        ///     
        /// </summary>
        /// <param name="onPack"></param>
        /// <param name="toPack"></param>
        /// <returns></returns>
        public static bool LoginTrace(ref LoginOnPack onPack, ref LoginToPack toPack)
        {
            //   
            string ReflectString = MethodReflect(MethodBase.GetCurrentMethod());
            // BODY
            try
            {
                // LOG-CALL
                Log(string.Format("CALL --> {0}", ReflectString));
                // CNN
                using (SqlConnection cnn = new SqlConnection())
                {
                    cnn.ConnectionString = ConfigurationManager.ConnectionStrings["Liao"].ToString();
                    cnn.Open();
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        // CMD-TXT
                        cmd.Connection = cnn;
                        cmd.CommandText = "";
                        cmd.CommandText += "INSERT INTO [Login] ([MemberID], [LoginTime], [ReturnFlag], [ReturnText])" + Environment.NewLine;
                        cmd.CommandText += "VALUES (@MemberID, @LoginTime, @ReturnFlag, @ReturnText)";
                        cmd.Parameters.Clear();
                        cmd.Parameters.AddWithValue("@MemberID", toPack.MemberID);
                        cmd.Parameters.AddWithValue("@LoginTime", toPack.LoginTime);
                        cmd.Parameters.AddWithValue("@ReturnFlag", toPack.ReturnFlag);
                        cmd.Parameters.AddWithValue("@ReturnText", toPack.ReturnText);
                        // CMD-LOG
                        Log(SqlToText(cmd));
                        // CMD-EXE
                        cmd.ExecuteNonQuery();
                    }
                }
                // LOG-SUCCESS
                Log(string.Format("SUCCESS --> {0}", ReflectString));
                //
                return true;
            }
            catch (Exception ex)
            {
                // LOG-FAILURE
                Log(string.Format("FAILURE --> {0}\r
{1}", ReflectString, ex)); // RETURN return false; } }