在我的 asp.net mvc 3 应用程序中,我想跟踪由 Linq To Sql 生成的 SQL 代码。我想把它写在一个文件中。这是我所做的:
web.config 更改:
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="myListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="LogLinqToSql.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
我创建了一个应该有助于写入文件的类(刚刚在一个教程中找到它):
public class LogLinqToSql : TextWriter
{
public override void Write(string value)
{
Debug.Write(value);
}
public override void Write(char[] buffer, int index, int count)
{
Debug.Write(new String(buffer, index, count));
}
public override System.Text.Encoding Encoding
{
get { return System.Text.Encoding.UTF8; }
}
}
以及用于从存储库获取项目并使用视图模型的 StoreController 操作方法 Content 的更改(mabby 因为它我的代码不起作用):
#define TRACE
public ViewResult Content(string category, int page = 1)
{
var context = new WebStoreDataContext();
Trace.WriteLine("StoreController.Content BEGINS");
context.Log = Console.Out;
var model = new StoreContentViewModel
{
Items = _itemsRepository.GetItems()
.Where(i => category == null || (i.Product != null && i.Product.Category == category))
.OrderBy(i => i.ItemId)
.Skip((page - 1) * PageSize)
.Take(PageSize),
// initializing other properties
};
context.Log = new LogLinqToSql();
context.SubmitChanges();
Trace.WriteLine("StoreController.Content ENDS");
Trace.WriteLine("");
return View(model);
}
只有“BEGIN”和“END”行出现在 .log 文件中。
那么,我是在做完全错误的事情吗?还有另一种方法可以将日志信息写入文件,或者我只需要修复某些部分???
提前感谢您的帮助!
编辑:
还尝试了此操作方法:
context.Log = new StreamWriter(@"C:\Users\Aleksey\repos\2\WebStore\WebStore\LogLinqToSql.log");
但是我得到一个 IOException: 该进程无法访问此文件,因为该文件已被其他进程使用。
这是同一个问题