有时我们需要记录整个系统运行的SQL以作分析,特别是在上线前这对我们做内部测试也非常有帮助,当然记录SQL的方法有很多,也可以使用三方的组件。3.2版本我们在框架底层新增了记录框架运行的所有SQl过程保存到用户指定的地方以便分析查看,只需要在配置文件把配置项”LogSQL”设置为True即可。框架会自动记录各常用数据库如:Oracle、SqlServer、MySQL等的操作情况。
一、Web记录Sql执行情况
1、在我们的Web项目中要记录SQL可以在Web的配置文件中设置LogSql配置项为True,默认为False,配置文件的位置MVC项目是在RDIFramework.MvcApp项目根目录下的XmlConfig文件夹下的system.config文件,WebForm项目是在RDIFramework.WebApp项目根目录下的Web.Config文件,设置配置项如下图所示:
只要设置LogSQL为True,框架就会自动记录所有Sql执行过程并保存到指定目录,一般默认在Web项目根目录的Log文件夹下,如下图:
2、查看记录的Sql。
打开一个文件,查年记录的Sql情况,如下:
二、WinForm记录Sql执行情况
WinForm项目记录Sql与Web类似,一样的要修改Config.xml中的记录Sql的配置项,如下图所示。
通过上面的配置后,一样的我们打开框架做一些操作后查看记录的Sql情况,如下图:
三、公共方法调用
如果我们需要单独记录sql的执行情况,可以调用框架提供的公共接口,如下图所示:
下面把写日志的三个公共接口分享,需要的可以参考哟。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#region public virtual void WriteLog(string commandText, string fileName = null) 写入sql查询句日志
/// <summary>
/// 写入sql查询句日志
/// </summary>
/// <param name="commandText"></param>
public
virtual
void
WriteLog(
string
commandText)
{
string
fileName = DateTime.Now.ToString(SystemInfo.DateFormat) +
" _ "
+
this
.FileName;
WriteLog(commandText, fileName);
}
/// <summary>
/// 写入sql查询句日志
/// </summary>
/// <param name="commandText">异常</param>
/// <param name="fileName">文件名</param>
public
virtual
void
WriteLog(
string
commandText,
string
fileName =
null
)
{
if
(
string
.IsNullOrEmpty(fileName))
{
fileName = DateTime.Now.ToString(SystemInfo.DateFormat) +
" _ "
+
this
.FileName;
}
string
returnValue =
string
.Empty;
// 系统里应该可以配置是否记录异常现象
if
(!SystemInfo.LogSQL)
{
return
;
}
// 将异常信息写入本地文件中
string
logDirectory = SystemInfo.StartupPath +
@"\\Log\\Query"
;
if
(!System.IO.Directory.Exists(logDirectory))
{
System.IO.Directory.CreateDirectory(logDirectory);
}
string
writerFileName = logDirectory +
"\\"
+ fileName;
if
(!File.Exists(writerFileName))
{
FileStream FileStream =
new
FileStream(writerFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
FileStream.Close();
}
StreamWriter streamWriter =
new
StreamWriter(writerFileName,
true
, Encoding.Default);
streamWriter.WriteLine(DateTime.Now.ToString(SystemInfo.DateTimeFormat) +
" "
+ commandText);
streamWriter.Close();
}
public
virtual
void
WriteLog(
string
commandText, IDbDataParameter[] dbParameters =
null
,
string
fileName =
null
)
{
// 系统里应该可以配置是否记录异常现象
if
(!SystemInfo.LogSQL)
{
return
;
}
if
(
string
.IsNullOrEmpty(fileName))
{
fileName = DateTime.Now.ToString(SystemInfo.DateFormat) +
" _ "
+ FileName;
}
string
message =
string
.Empty;
message = DateTime.Now.ToString(SystemInfo.DateTimeFormat) + System.Environment.NewLine +
"commandText内容"
+ System.Environment.NewLine + commandText;
if
(dbParameters !=
null
)
{
StringBuilder sb =
new
StringBuilder();
foreach
(
var
parameter
in
dbParameters)
{
sb.AppendLine(parameter.ParameterName +
"="
+ parameter.Value);
}
message += System.Environment.NewLine +
"dbParameters内容"
+ System.Environment.NewLine + sb.ToString();
}
string
logDirectory = SystemInfo.StartupPath +
@"\Log\Query"
;
if
(!System.IO.Directory.Exists(logDirectory))
{
System.IO.Directory.CreateDirectory(logDirectory);
}
string
writerFileName = logDirectory +
"\\"
+ fileName;
if
(!File.Exists(writerFileName))
{
FileStream FileStream =
new
FileStream(writerFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
FileStream.Close();
}
StreamWriter streamWriter =
new
StreamWriter(writerFileName,
true
, Encoding.Default);
streamWriter.WriteLine(DateTime.Now.ToString(SystemInfo.DateTimeFormat) +
" "
+ message);
streamWriter.Close();
}
#endregion
|
本文转自yonghu86博客园博客,原文链接:http://www.cnblogs.com/huyong/p/6490609.html,如需转载请自行联系原作者