C# 设置EF拦截器文件名布局

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"/>

在EF 6.1(以后版本)中,我可以如下配置我的app.config文件:

<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重新分析配置文件,将日志文件名设置为包含日期。但是这是一个严重的难题,我个人决不会允许这样的错误在生产环境中进行黑客攻击。