C# 设置EF拦截器文件名布局
在EF 6.1(以后版本)中,我可以如下配置我的app.config文件:C# 设置EF拦截器文件名布局,c#,entity-framework,logging,entity-framework-6,C#,Entity Framework,Logging,Entity Framework 6,在EF 6.1(以后版本)中,我可以如下配置我的app.config文件: <interceptors> <interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework"> <parameters> <parameter value="C:\Stuff\LogOutput.txt"/>
<interceptors>
<interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework">
<parameters>
<parameter value="C:\Stuff\LogOutput.txt"/>
<parameter value="true" type="System.Boolean"/>
</parameters>
</interceptor>
</interceptors>
以上内容位于my app.config的EntityFramework部分
我如何才能设置文件名的布局,以反映类似于NLog这样的流行日志记录器的操作日期,从而每天获得新日志
<target name="logfile" xsi:type="File" fileName="C:\logs\folder\log_${shortdate}.txt" layout="${longdate} ${level:uppercase=true:padding=-5} [${threadid:padding=3}] ${logger:padding=-55} - ${message}" />
这样的功能是否可以在不需要编码和重新编译的情况下使用?根据,这是使用简单记录器不可能的。要做到这一点,您需要实现自己的拦截器
// Code from EF6 source:
public DatabaseLogger(string path, bool append)
{
Check.NotEmpty(path, "path");
_writer = new StreamWriter(path, append) { AutoFlush = true };
}
如果是这样的话,这应该作为评论添加。他已经说过了,不需要进行编码和重新编译。我很确定他也知道如何使用代码来实现这一点,问题是这样的工具是否可用。答案是“不,原因就在这里”。你甚至不需要发布代码,很明显,它只接受一个
路径
和一个bool
。这就是全部。一切都可以放在一个简单的评论。他这样问,但实际上他希望一些解决他的问题的答案会被公布。此外,我认为他可能有一些可以接受的工作。试着从这里开始,而不需要一些编码和重新编译,我们可以找到一些解决方法(当然,默认的DatabaseLogger
会完全卡住它)。我发布了代码片段,以验证它是一个简单的字符串路径,是一个直接构造函数属性(根本没有处理)。在一些配置部分(例如web.config路径),有一些属性变量被替换。EF6.1没有提到日期或其他变量的功能。是的,你可以做一些疯狂的工作,比如使用XSL重新分析配置文件,将日志文件名设置为包含日期。但是这是一个严重的难题,我个人决不会允许这样的错误在生产环境中进行黑客攻击。