在.NET中实现以数据库为存储介质的日志库

2024-01-06

我刚刚开始开发一个日志库,每个人都可以使用它来在用户运行我们的应用程序时跟踪任何类型的系统信息。到目前为止最简单的示例是跟踪信息、警告和错误。

我希望所有插件都能够使用此功能,但由于每个开发人员可能对报告的重要内容有不同的想法,因此我希望尽可能保持通用。

在 C++ 世界中,我通常会使用类似stl::pair<string,string>充当键值对结构,并具有stl::list这些充当日志中的“行”。日志缓存将是list<list<pair<string,string>>>(啊!)。这样,开发人员可以使用常量字符串键(如 INFO、WARNING、ERROR)为数据库中的列提供一致的命名(用于选择特定类型的信息)。

我希望数据库能够处理任意数量的不同列名。例如,John 可能有一个 INFO 行,其中包含名为 USER 的列,而 Bill 可能有一个 INFO 行,其中包含名为 FILENAME 的列。我希望日志查看器能够显示所有信息,如果一份报告没有 INFO / FILENAME 值,则这些字段应该显示为空白。所以一种选择是使用List<List<KeyValuePair<String,String>>>,另一个是让日志库使用者以某种方式“注册”其模式,然后让数据库执行ALTER TABLE来处理这种情况。还有一个想法是拥有一个仅用于键值对的表,并使用一个将键值对映射回原始日志条目的外键。

我显然不希望日志记录使系统陷入困境,因此我只锁定日志缓存来复制数据(并删除已复制的数据),然后后台线程将信息转储到数据库。

我对此的具体问题是:

  1. 您发现任何性能问题吗?换句话说,您是否曾经尝试过类似的方法,但发现某些方法在实践中效果不佳?
  2. 还有吗.NETish实现键值对的方法,除了List<List<KeyValuePair<String,String>>>?
  3. 即使有一种方法可以做得更好,我上面提出的 ALTER TABLE 想法是一件坏事吗?
  4. 您会推荐多个数据库而不是单个数据库吗?我还不知道写入日志的频率,但理想情况下我们希望拥有大量低级信息。也许应该有一个具有固定模式的数据库,仅用于低级别的内容,然后另一个数据库可以更灵活地向用户报告信息。

你为什么不检查一下log4net http://logging.apache.org/log4net/?这可能足以满足您的目的,并且您将避免重新发明已经发明多次的轮子:-)

这里有一些关于如何在数据库上存储日志信息的配置示例:

http://logging.apache.org/log4net/release/config-examples.html http://logging.apache.org/log4net/release/config-examples.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在.NET中实现以数据库为存储介质的日志库 的相关文章

随机推荐

  • -framework Accelerate,其中包含

    我正在尝试编译别人的代码 但没有简单的头文件 我需要链接 osx 上的默认 lapack 和 blas 库 经过一番搜索后我发现它们位于 Accelerate 框架中 在我的 make inc 中我使用了类似的东西 LAPACK LIBS
  • Handlebars-template 中元素的 Onclick 功能

    我正在使用 Handlebars js 和一些 jQuery 构建一个简单的 Web 应用程序 现在我有一个数据列表 并通过 Handlebars 模板呈现它们 然后我想要一些与这些相关的操作 例如更新一个元素 或者删除一个元素 我有与这些
  • Android - 完全从 xml 创建列表视图

    我想在我的申请中提出一些选择 现在我正在用一个一个的按钮来做这件事 我真正想做的是将它们呈现为一个列表 就像 设置 应用程序中一样 这归结为创建一个包含预定义值 选择的列表 我的问题是我不知道如何使用 xml 来做到这一点 我可以像这样将
  • ReactJS:如何将一个组件覆盖在另一个组件的元素之上?

    我才刚刚开始反应 我有一个带有输入字段和按钮的组件 还有另一个组件返回 JSX 一个闪烁的点 我正在主组件中导入闪烁点组件 并希望在输入字段为空时将闪烁点覆盖在输入字段的顶部 我怎样才能实现这个目标 请帮助我 其代码可以在以下位置找到 ht
  • For 循环总是至少执行一次吗?

    据我的老师说 即使不满足条件 for 循环也总是至少执行一次 示例 就像我从 C 中知道的那样 for int i 6 i lt 5 i irrelevant for this question 据她说 这个循环至少会执行一次 但它没有执行
  • Android 仅当 RecycleView/List 大于屏幕时才 setStackFromEnd

    我有一个 RecyclerView 我想开始显示底部项目 所以我使用 myLayoutManager setStackFromEnd true 当有足够的项目填满屏幕时 它的工作方式正如我想要的那样 但是如果 RecyclerView 中只
  • Guid 作为 RavenDB 中的 Id

    The RavenDb 文档 http ravendb net docs client api basic operations saving new document状态 支持数字或 Guid Id 属性 并且可以无缝工作 在这种情况下
  • 将我的图像置于 ul li div 中心

    我在页脚中放置了一张图像 我希望它居中 但我不会工作 我希望我的图像居中 所以我希望有人可以帮助我看看我的代码 HTML div class center ul li a href target blank class centering
  • VS2019 Xamarin Forms 远程 IOS 模拟器黑屏 - 如何修复?

    Xamarin 表单项目微软 Visual Studio 2019 版本 16 9 Mac 上的 Xcode 版本 12 4 使用运行14 4的iPad Pro 11英寸作为模拟设备和IOS版本 我尝试过其他模拟器 如果我在 Mac 上构建
  • 为什么我的 Rails 初始化程序在控制台中缓存 ENV 变量(Foreman、Dev env)

    起初的小烦恼现在变成了令人头痛的事情 我正在构建一个 Rails 4 应用程序 并使用 Foreman 进行开发设置 并使用 Procfile 和 env 文件进行配置 当我在 env 文件中设置 ENV 变量时 我的应用程序会正确拾取它
  • 将输出从 terraform 传递到 Azure Devops Pipeline,并在 azure 后端存储中使用状态文件

    我似乎无法检索 Terraform 的公共 IP 地址输出以用于 AzureDevops 中构建管道的下一步 Terraform 状态拉动工作并输出到 json 文件 无法对输出进行 grep Terraform state show op
  • Instagram 如何在故事中嵌入可点击的文本?

    我正在尝试在我的 Android 应用程序中实现类似 Instagram 的故事功能 我可以在图像上制作文本叠加 但如何使它们可点击 如上面的屏幕截图所示 Thanks 尝试使用clickable span with SpannableSt
  • 通过重新压缩 APK 内容来减小其大小

    我有一个相当大的 apk 文件 我正在尝试减小它的大小 已经使用了所有常用技术 例如 Proguard 和图像压缩 尽管如此 该 apk 仍然很大 大约 25mb 维基百科 http en wikipedia org wiki APK fi
  • 使用 libstdc++ 编译库与 clang++ -stdlib=libc++

    我在 Mac OS X 10 8 2 下使用 C 工作 最近需要使用 C 11 功能 这些功能可以通过使用 libc stdlib 的 clang 编译器获得 但是 我还需要使用一些针对 libstdc 来自 MacPorts 编译和链接的
  • SpriteKit 侧向滚动不会更新物理世界

    遵循示例here https stackoverflow com questions 24748247 define map bounds and center on player node 24843989 24843989 除了 Obj
  • 在 React 中定义空 dom 元素的正确方法

    我发送一个可选参数checkbox在组件的 prop 内 var checkBox this props checkbox span span null 然后我这样说 div checkBox div 从上面可以看出 我将 null 分配给
  • Android - 通过彩信发送音频文件

    我使用以下代码通过电子邮件 dropbox 发送音频文件 这并没有让我选择通过彩信发送相同的文件 有人知道如何将其附加到彩信并让用户根据需要发送吗 Intent share new Intent Intent ACTION SEND sha
  • npm rollbackFailed安装任何包时出现可选错误

    我在安装任何一个时遇到问题npm包 这是我的错误 rollbackFailedOptional verb npm session xxxxxxxxxxx 为了解决这个问题 我做了一些事情 但仍然遇到同样的错误 I put registry
  • Resources.getSystem() 与 getResources()

    我是 Android 新手 我正在通过网络上的可用资源自己学习 SDK 我现在遇到一个情况 我正在尝试以下代码 Type 1 getResources getString android R string cancel Type 2 Res
  • 在.NET中实现以数据库为存储介质的日志库

    我刚刚开始开发一个日志库 每个人都可以使用它来在用户运行我们的应用程序时跟踪任何类型的系统信息 到目前为止最简单的示例是跟踪信息 警告和错误 我希望所有插件都能够使用此功能 但由于每个开发人员可能对报告的重要内容有不同的想法 因此我希望尽可