因此,我的.NET解决方案实际上有2个不同的项目,一个用于数据访问层,另一个用于主项目。.我想知道这是否就是为什么我的价值观没有在项目之间或其他东西之间传递的原因。我已经将NLog配置添加到主项目中的Global.asax.cs文件中。
var config = new LoggingConfiguration(); // Add another NLog Target (ChangeTracking) var changeTrackingDbTarget = new DatabaseTarget() { Name = "ChangeTracking", ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["NLogConnection"].ConnectionString, CommandText = "INSERT INTO Common.ChangeTracking ( ApplicationID, UserName, Name, EntityName, PropertyName, PrimaryKeyValue, OldValue, NewValue, DateChanged) " + "VALUES (@ApplicationID, @UserName, @Name, @EntityName, @PropertyName, @PrimaryKeyValue, @OldValue, @NewValue, @DateChanged);" }; changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@ApplicationID", Layout = "${appsetting:name=AppID:default=null}" }); changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@UserName", Layout = "${identity:authType=false:isAuthenticated=false}" }); changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@Name", Layout = "${gdc:item=name}" }); changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@EntityName", Layout = "${gdc:item=entityname}" }); changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@PropertyName", Layout = "${gdc:item=propname}" }); changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@PrimaryKeyValue", Layout = "${gdc:item=primarykey}" }); changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@OldValue", Layout = "${event-properties:item=oldvalue}" }); changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@NewValue", Layout = "${event-properties:item=newvalue}" }); changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@DateChanged", Layout = "${date}" }); config.LoggingRules.Add(new LoggingRule("*", LogLevel.Info, changeTrackingDbTarget)); //LogManager.Configuration.AddTarget("ExceptionTracking", dbTarget); LogManager.Configuration = config; LogManager.Configuration.AddTarget("ChangeTracking", changeTrackingDbTarget);
如您所见,我尝试使用事件属性和gdc,但实际上都没有获取我要发送的参数。但是,设置ApplicationID,用户名和DateChanged(并很好地保存到Common.ChangeTracking表中)就可以了,因为它们不是自定义属性。
包含实际试图记录保存更改的代码的类在我的数据访问层项目的根目录中(GDC或EventInfo都不起作用:]
private static Logger _logger = LogManager.GetLogger("ChangeTracking");
//private static Logger _logger = LogManager.GetCurrentClassLogger();
LogEventInfo changeEvent = new LogEventInfo(LogLevel.Info, "ChangeTracking", "A change event has been fired");
GlobalDiagnosticsContext.Set("Name", "Jake");
changeEvent.Properties["EntityName"] = "test";
changeEvent.Properties["PropertyName"] = "test property name";
changeEvent.Properties["PrimaryKeyValue"] = 123;
changeEvent.Properties["OldValue"] = "test";
changeEvent.Properties["NewValue"] = "test";
_logger.Log(changeEvent);
所以我的.NET解决方案实际上有2个不同的项目,一个用于数据访问层,另一个用于主项目。我想知道这就是为什么我的价值观没有在项目之间延续的原因...
我发现了我的错误。我设置的第一个参数错误: