2011年5月16日 星期一

[EL5]使用Logging Application Block 將記錄寫入資料庫

1. 加入參考

image

2. 加入資料庫的資料來源。注意:目前版本不支援Entity Framework的連結形式。

<connectionStrings>
  <add name="LoggingConnectionString" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Logging;Persist Security Info=True;User ID=admin;Password=pw"
    providerName="System.Data.SqlClient" />
<connectionStrings>

3. 在專案的Web.config上按右鍵,選擇[Edit Enterprise Library V5 Configuration]來進行編輯。

image

4. 新增Logging Target Listeners為Database Trace Listener,在Database Instance選擇剛剛設定的連線字串。

image

5. 將訊息寫入資料庫

using Microsoft.Practices.EnterpriseLibrary.Logging;
using Microsoft.Practices.EnterpriseLibrary.Logging.Database;
LogEntry le = new LogEntry();
le.TimeStamp = DateTime.Now; //原設定非local,建議加入
le.Message = "測試訊息 - 資料變更成功";
//加入額外屬性
le.ExtendedProperties.Add("Controller", "Channel");
le.ExtendedProperties.Add("Action", "Edit");
//將變更的物件屬性也記錄到資料庫
le.ExtendedProperties = Utility.GetDictionary(x);
Logger.Write(le);

取得物件屬性的部分如下:

//將物件中的屬性(Property)放入字典
public static IDictionary<string, object> GetDictionary(object obj)
{
    IDictionary<string, object> dict = new Dictionary<string, object>();
    PropertyInfo[] pis = obj.GetType().GetProperties();
    foreach (PropertyInfo pi in pis)
    {
        dict.Add(pi.Name, pi.GetValue(obj, null).ToString());
    }
    return dict;
}
參考資源

沒有留言:

張貼留言