构建日志和打印日志的逻辑类 - RecordLog
2017-05-02 14:55:33 访问(4977) 赞(0) 踩(0)
using Oracle.ManagedDataAccess.Client;
using SlowX.DAL.Classes;
using SlowX.DAL.IRecorder;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
// using System.Data.OracleClient;
using System.Data.SqlClient;
using System.Text;
namespace SlowX.DAL.Recorder
{
/// <summary>
/// 构建日志和打印日志的逻辑类
/// </summary>
public class RecordLog
:
IRecordLog
{
/// <summary>
/// 是否允许日志
/// </summary>
public readonly static bool _EnabledLog
=
System.Configuration.ConfigurationManager.AppSettings["SlowX.DAL.Recorder.RecordLog.EnabledLog"] == "1";
/// <summary>
/// 只能用保护,不然反射不到
/// </summary>
protected static IRecordLog m_instance = null;
/// <summary>
/// typeof(SqlParameter)
/// </summary>
public readonly static Type SqlParameterType = typeof(SqlParameter);
/// <summary>
/// (OracleParameter)
/// </summary>
public readonly static Type OracleParameterType
= typeof(OracleParameter);
/// <summary>
/// typeof(OleDbParameter)
/// </summary>
public readonly static Type OleDbParameterType = typeof(OleDbParameter);
/// <summary>
/// 空格 制表符 空格
/// </summary>
public readonly static string STR_BLANK_TAB_BLANK = " " + '\t' + " ";
/// <summary>
/// 设置静态实体
/// </summary>
/// <param name="_instance"></param>
public static void SetInstance(IRecordLog _instance)
{
m_instance = null;
m_instance = _instance;
}
/// <summary>
/// 静态实体
/// </summary>
public static IRecordLog instance
{
get
{
return m_instance;
}
}
/// <summary>
/// 网站常用的逻辑
/// </summary>
public RecordLog()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 是否允许日志
/// </summary>
public virtual bool EnabledLog
{
get
{
return _EnabledLog;
}
}
/// <summary>
/// 写入日志(需要继承)
/// </summary>
/// <param name="logItem"></param>
public virtual void WriteLog(SqlLogItem logItem)
{
return;
}
/// <summary>
/// object转成SqlServer格式的时间 - SqlServerConvertDateTimeToSQL +
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public string SqlServerConvertDateTimeToSQL
(
object obj
)
{
if (obj == DBNull.Value || obj == null || obj.ToString().Length == 0)
return "";
return " convert(datetime,'" + Convert.ToDateTime(obj).ToString("yyyy-MM-dd HH:mm:ss") + "',20) ";
}
/// <summary>
/// object转成Oracle格式的时间 - OracleConvertDateTimeToSQL +
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public string OracleConvertDateTimeToSQL
(
object obj
)
{
if (obj == DBNull.Value || obj == null || obj.ToString().Length == 0)
return "";
return " to_date('" + Convert.ToDateTime(obj).ToString("yyyy-MM-dd HH:mm:ss") + "','yyyy-mm-dd hh24:mi:ss') ";
}
/// <summary>
/// object转换成Access格式的时间 - AccessConvertDateTimeToSQL +
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public string AccessConvertDateTimeToSQL
(
object obj
)
{
if (obj == DBNull.Value || obj == null || obj.ToString().Length == 0)
return "";
return " cdate('" + Convert.ToDateTime(obj).ToString("yyyy-MM-dd HH:mm:ss") + "') ";
}
/// <summary>
///
/// </summary>
/// <param name="SQL"></param>
/// <param name="commandParameters"></param>
/// <returns></returns>
public SqlContext BuildSqlContext(string SQL, IDataParameter[] commandParameters)
{
if(SQL==null||SQL.Length == 0)
return null;
SqlContext theResult = new SqlContext();
theResult.SQL = SQL;
string dateTimeValue = string.Empty;
// 添加调试用的SQL语句 //
if (commandParameters != null && commandParameters.Length > 0)
{
string convertSQL = SQL;
StringBuilder stringBuilderParams = new StringBuilder();
StringBuilder sqlParams = new StringBuilder();
foreach (IDataParameter param in commandParameters)
{
if (param == null)
continue;
sqlParams.Append(param.ParameterName);
sqlParams.Append(STR_BLANK_TAB_BLANK);
if (param.Value == DBNull.Value || param.Value == null)
sqlParams.Append("$DBNull.Value");
else
sqlParams.Append(param.Value.ToString());
sqlParams.Append(STR_BLANK_TAB_BLANK);
sqlParams.Append(param.DbType.ToString());
sqlParams.Append(STR_BLANK_TAB_BLANK);
sqlParams.Append(param.Direction.ToString());
sqlParams.Append(STR_BLANK_TAB_BLANK);
sqlParams.AppendLine(param.GetType().Name);
// 这里执行替换,会有问题 //
if (param.Value == System.DBNull.Value)
{
convertSQL = convertSQL.Replace(param.ParameterName, "null");
stringBuilderParams.Append(param.ParameterName);
stringBuilderParams.Append(" = null");
}
else if (param.DbType == DbType.Int32 || param.DbType == DbType.Int64 || param.DbType == DbType.Int16)
{
convertSQL = convertSQL.Replace(param.ParameterName, param.Value.ToString());
stringBuilderParams.Append(param.ParameterName);
stringBuilderParams.Append(" = ");
stringBuilderParams.Append(param.Value.ToString());
}
else if (param.DbType == DbType.DateTime || param.DbType == DbType.DateTime2) // || DateTimeFunctions.IsDateTimeType(param.Value))
{
// 转义成时间 //
Type t = param.GetType();
try
{
if (t == SqlParameterType)
{
dateTimeValue = SqlServerConvertDateTimeToSQL(param.Value);
}
else if (t == OracleParameterType)
{
dateTimeValue = OracleConvertDateTimeToSQL(param.Value);
}
else if (t == OleDbParameterType)
{
dateTimeValue = AccessConvertDateTimeToSQL(param.Value);
}
else
{
dateTimeValue = "'" + param.Value.ToString().Replace("'", "''") + "'";
}
}
catch (Exception err)
{
dateTimeValue = "'[发生异常:" + err.Message + "]'";
}
convertSQL = convertSQL.Replace(param.ParameterName, dateTimeValue);
stringBuilderParams.Append(param.ParameterName);
stringBuilderParams.Append(" = ");
stringBuilderParams.Append(dateTimeValue);
}
else
{
convertSQL = convertSQL.Replace(param.ParameterName, "'" + param.Value.ToString().Replace("'", "''") + "'");
stringBuilderParams.Append(param.ParameterName);
stringBuilderParams.Append(" = '");
stringBuilderParams.Append(param.Value.ToString().Replace("'", "''"));
stringBuilderParams.Append("'");
}
stringBuilderParams.AppendLine();
}
theResult.ConvertSQL = convertSQL;
theResult.ConvertParams = stringBuilderParams.ToString();
theResult.SQLParams = sqlParams.ToString();
}
return theResult;
}
/// <summary>
/// 构建SQL语句
/// </summary>
/// <param name="SQL"></param>
/// <param name="commandParameters"></param>
/// <returns></returns>
public SqlContext BuildSqlContextByList
(
string SQL,
List<IDataParameter> commandParameters
)
{
if (SQL == null || SQL.Length == 0)
return null;
SqlContext theResult = new SqlContext();
theResult.SQL = SQL;
string dateTimeValue = string.Empty;
// 添加调试用的SQL语句 //
if (commandParameters != null && commandParameters.Count > 0)
{
string convertSQL = SQL;
StringBuilder stringBuilderParams = new StringBuilder();
StringBuilder sqlParams = new StringBuilder();
foreach (IDataParameter param in commandParameters)
{
if (param == null)
continue;
sqlParams.Append(param.ParameterName);
sqlParams.Append(STR_BLANK_TAB_BLANK);
if (param.Value == DBNull.Value || param.Value == null)
sqlParams.Append("$DBNull.Value");
else
sqlParams.Append(param.Value.ToString());
sqlParams.Append(STR_BLANK_TAB_BLANK);
sqlParams.Append(param.DbType.ToString());
sqlParams.Append(STR_BLANK_TAB_BLANK);
sqlParams.Append(param.Direction.ToString());
sqlParams.Append(STR_BLANK_TAB_BLANK);
sqlParams.AppendLine(param.GetType().Name);
// 这里执行替换,会有问题 //
if (param.Value == System.DBNull.Value)
{
convertSQL = convertSQL.Replace(param.ParameterName, "null");
stringBuilderParams.Append(param.ParameterName);
stringBuilderParams.Append(" = null");
}
else if (param.DbType == DbType.Int32 || param.DbType == DbType.Int64 || param.DbType == DbType.Int16)
{
convertSQL = convertSQL.Replace(param.ParameterName, param.Value.ToString());
stringBuilderParams.Append(param.ParameterName);
stringBuilderParams.Append(" = ");
stringBuilderParams.Append(param.Value.ToString());
}
else if (param.DbType == DbType.DateTime || param.DbType == DbType.DateTime2) // || DateTimeFunctions.IsDateTimeType(param.Value))
{
// 转义成时间 //
Type t = param.GetType();
try
{
if (t == SqlParameterType)
{
dateTimeValue = SqlServerConvertDateTimeToSQL(param.Value);
}
else if (t == OracleParameterType)
{
dateTimeValue = OracleConvertDateTimeToSQL(param.Value);
}
else if (t == OleDbParameterType)
{
dateTimeValue = AccessConvertDateTimeToSQL(param.Value);
}
else
{
dateTimeValue = "'" + param.Value.ToString().Replace("'", "''") + "'";
}
}
catch (Exception err)
{
dateTimeValue = "'[发生异常:" + err.Message + "]'";
}
convertSQL = convertSQL.Replace(param.ParameterName, dateTimeValue);
stringBuilderParams.Append(param.ParameterName);
stringBuilderParams.Append(" = ");
stringBuilderParams.Append(dateTimeValue);
}
else
{
convertSQL = convertSQL.Replace(param.ParameterName, "'" + param.Value.ToString().Replace("'", "''") + "'");
stringBuilderParams.Append(param.ParameterName);
stringBuilderParams.Append(" = '");
stringBuilderParams.Append(param.Value.ToString().Replace("'", "''"));
stringBuilderParams.Append("'");
}
stringBuilderParams.AppendLine();
}
theResult.ConvertSQL = convertSQL;
theResult.ConvertParams = stringBuilderParams.ToString();
theResult.SQLParams = sqlParams.ToString();
}
return theResult;
}
/// <summary>
/// 构建日志内容
/// </summary>
/// <param name="logItem"></param>
/// <returns></returns>
public string BuildLog(SqlLogItem logItem)
{
if (logItem == null || logItem._SqlContextValue==null)
return "";
StringBuilder theResult = new StringBuilder();
if(logItem.IsException)
theResult.Append("[异常]");
if(logItem.IsTransaction)
theResult.Append("[事务]");
theResult.AppendLine(logItem.EmExecuteTypeValue.ToString() + " ==> " + logItem.ConnectionString);
theResult.AppendLine();
if (logItem._SqlContextValue.ConvertSQL.Length > 0)
{
theResult.AppendLine(logItem._SqlContextValue.ConvertSQL);
theResult.AppendLine();
}
if (logItem._SqlContextValue.ConvertParams.Length > 0)
{
theResult.AppendLine(logItem._SqlContextValue.ConvertParams);
theResult.AppendLine();
}
theResult.AppendLine(logItem._SqlContextValue.SQL);
theResult.AppendLine();
if (logItem._SqlContextValue.SQLParams.Length > 0)
{
theResult.AppendLine(logItem._SqlContextValue.SQLParams);
theResult.AppendLine();
}
theResult.AppendLine("[执行时间]:" + (logItem.EndTime - logItem.StartTime).ToString() + ",开始时间:" + logItem.StartTime.ToString() + " ~ 结束时间:" + logItem.StartTime.ToString());
theResult.AppendLine(logItem.Message);
return theResult.ToString();
}
}
}
标签:
构建日志和打印日志的逻辑类 - RecordLog 


上一条:
下一条:
相关评论
发表评论