我们正在运行Entity Framework 6并且有一个DatabaseLogFormatter来格式化我们的数据,它通过NLog AsyncTargetWrapper记录到一个文件中.该应用程序是一个MVC5 Web应用程序.
DatabaseLogFormatter主要是空的存根,LogCommand和LogResult除外.两者都正确地格式化数据.到目前为止,NLog日志记录一直没有问题.
我们遇到的问题是,经过几个小时的正常运行时间(似乎是随机的,无法找到模式),它将创建几乎重复的日志行.一旦启动它继续记录每一行两次或三次.有时它会随机返回一行.
行将在DatabaseLogFormatter中读取的时间不同,这意味着请求正在重新格式化(而不是NLog问题).
public class NLogFormatter : DatabaseLogFormatter
{
private static readonly DbType[] StringTypes = { DbType.String, DbType.StringFixedLength, DbType.AnsiString, DbType.AnsiStringFixedLength, DbType.Date, DbType.DateTime, DbType.DateTime2, DbType.Time, DbType.Guid, DbType.Xml};
public NLogFormatter(DbContext context, Action<string> writeAction)
: base(context, writeAction)
{
}
public override void LogCommand<TResult>(
DbCommand command, DbCommandInterceptionContext<TResult> interceptionContext)
{
var builder = new StringBuilder();
builder.Append($"COMMAND|{(command.CommandType == CommandType.StoredProcedure ? "EXEC " :"")}{command.CommandText.Replace(Environment.NewLine, " ")} ");
foreach (var parameter in command.Parameters.OfType<DbParameter>())
{
builder.Append("@")
.Append(parameter.ParameterName)
.Append(" = ")
.Append(parameter.Value == null || …Run Code Online (Sandbox Code Playgroud)