语义记录应用程序块(SLAB)对我很有吸引力,我希望在我正在编写的大型复合应用程序中使用它.要使用它,可以编写一个派生自'EventSource'的类,并在类中为每个要记录为事件类型事件的事件和简单字符串包含一个方法.
像我这样的应用程序可能会有数百个此类事件.我可以有一个基于'EventSource'的类只有一个事件,"SomethingHappened",并记录所有内容,在努力和准确度谱的一个极端,我可以为我执行的每个操作都有一个事件.
对于不同的功能区域,使用EventSource衍生产品是一个好主意.该应用程序几乎不了解业务逻辑本身; 这些都是由MEF插件模块提供的,所以我可以拥有bootrapping,安全性,配置更改等的事件源.任何插件模块都可以为它想要记录的任何事件定义事件源.
这是一个很好的策略,还是许多EventSource派生记录器是一个不受欢迎的应用程序功能?
如果我改变了......
EventSource(Name="BasicLogger")
public class BasicLogger : EventSource { ... }
Run Code Online (Sandbox Code Playgroud)
对...
EventSource(Name="HardymanDatabaseLog")
public class BasicLogger : EventSource { ... }
Run Code Online (Sandbox Code Playgroud)
...我仍然收到日志消息,但它们已损坏.
消息没有到达,或者它们是由当前项目中甚至不存在的缺失/删除/删除方法格式化的!
由于某些未知原因,特定字符串'HardymanDatabaseLog'存在问题
我认为这可能归结为一个在某个地方表现出来的腐败仪器清单.
请继续阅读以了解更多信息 ...!(谢谢:o))
我有一个简单的控制台应用程序,EnterpriseLibrary.SemanticLogging通过nuget包引用.
使用这里的示例代码,我添加了一个BasicLogger类.
当我运行我的简单应用程序时......
using System.ComponentModel;
using System.Diagnostics.Tracing;
namespace Etw
{
class Program
{
static void Main(string[] args)
{
BasicLogger.Log.Error("Hello1");
BasicLogger.Log.Critical("Hello2");
}
}
[EventSource(Name = "BasicLogger")]
public class BasicLogger : EventSource
{
public static readonly BasicLogger Log = new BasicLogger();
[Event(1, Message = "{0}", Level = EventLevel.Critical)] …Run Code Online (Sandbox Code Playgroud) 我已经实现了语义日志记录,以将条目记录到azure表存储中.现在我想从azure表中删除旧的日志条目(比如说超过30天).问题是azure表中的partitionKeys和RowKeys是动态生成的.像这样的东西
PartitionKey RowKey
2519569987199999999 MyProjectName_2519569788418593594_FFFFFFF8 //entry date 20 october 2015
2519573205599999999 MyProjectName_2519573006928838932_FFFFFFE1 // entry date 16 october 2015
Run Code Online (Sandbox Code Playgroud)
我研究并发现PartitionKey的格式 DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks
如何从表中获取数据以进行删除?我需要进行全表扫描,因为partitionKey是动态的吗?