Tag: logging

使用log4net登录DB

我使用log4net来记录项目中的错误。 我想将消息记录到DB( SQL Server )中,所以我添加了AdoNetAppender但它不起作用(其他appender工作正常,连接字符串是正确的)。 有什么不对?

NLog没有写入事件日志.NET Core 2.1

我已经将NLog添加到我的.NET核心控制台应用程序中,它可以处理文件和数据库目标。 但是,当我尝试使用eventviewer时,它不会记录任何内容。 当我为eventviewer目标添加代码时,文件和数据库部分不记录任何内容。 当我删除它时,日志记录再次开始工作。 我使用Powershell为应用程序添加了一个新的事件查看器源,因此这不是问题。 应用程序不会崩溃或报告错误,它运行正常,但在包含事件查看器时不记录任何内容。 Server=test; Database=test; User Id=sa; Password=password; INSERT INTO dbo.Log (Application, Logged, Level, Message, Logger, CallSite, Exception ) VALUES (@Application, @Logged, @Level, @Message, @Logger, @Callsite, @Exception); 关于如何实现这个或者我错过了什么的任何想法?

entlib无效的TraceListenerData类型

我为Enterprise Library 5 Logging Block创建了一个自定义侦听器,它由配置编辑器识别,但会抛出运行时配置exception: 尝试使用自定义记录器 static IUnityContainer _container; static LogWriter _writer; static IServiceLocator _locator; public static void Inf(string message) { if (_container == null) { // Create the container _container = new UnityContainer(); // Configurator will read Enterprise Library configuration // and set up the container var configurator = new UnityContainerConfigurator(_container); // Configuration source […]

C#日志设计:扩展方法,替代方案?

我想编写一个可以轻松附加到当前项目中任何类的记录器。 对于开发,将消息记录到控制台会很方便,而在最终版本中,我想记录到文件或其他内容。 一个人应该能够通过编辑几行代码或理想情况下的设置文件来改变行为。 到目前为止我所拥有的是这种类结构: public interface ILogger { void LogMessage(String message); // … other logging functions (exceptions, time etc.) don’t matter here }; public interface ILoggable { }; public static class LoggingProvider { private static ILogger logger = ConsoleLogger.handle; public static void LogMessage(this ILoggable obj, String message) { logger.LogMessage(message); } } public sealed class NullLogger […]

使用数据库作为存储介质在.NET中实现日志记录库

我刚刚开始研究一个日志库,每个人都可以使用它来跟踪用户运行我们的应用程序时的任何类型的系统信息。 到目前为止,最简单的示例是跟踪信息,警告和错误。 我希望所有插件都能够使用此function,但由于每个开发人员可能对报告的重要性有不同的想法,因此我希望尽可能保持通用。 在C ++世界中,我通常会使用像stl::pair这样的东西作为键值对结构,并且在这些日志中有一个stl::list作为“行”。 然后,日志缓存将是一个list<list<pair>> (唉!)。 这样,开发人员可以使用像INFO,WARNING,ERROR这样的const字符串键来为数据库中的列提供一致的命名(用于选择特定类型的信息)。 我希望数据库能够处理任意数量的不同列名。 例如,John可能有一个INFO行,其中一列名为USER,而Bill可能有一个INFO行,其中一列名为FILENAME。 我希望日志查看器能够显示所有信息,如果一个报告没有INFO / FILENAME的值,那些字段应该只显示为空白。 因此,一种选择是使用List<List<KeyValuePair> ,另一种选择是让日志库使用者以某种方式“注册”其模式,然后让数据库执行ALTER TABLE来处理这种情况。 另一个想法是拥有一个仅用于键值对的表,其中一个外键将键值对映射回原始日志条目。 我显然不希望日志记录陷入困境,因此我只锁定日志缓存以复制数据(并删除已经复制的数据),然后后台线程将信息转储到数据库。 我对此的具体问题是: 你看到任何性能问题吗? 换句话说,你有没有试过这样的事情,发现某些事情在实践中效果不好? 除了List<List<KeyValuePair>>之外,还有更多的.NETish方法来实现键值对吗? 即使有办法更好地做#2,我上面提出的ALTER TABLE的想法是不是很糟糕? 你会推荐一个多个数据库吗? 我还不知道日志写入的频率,但理想情况下我们希望有大量的低级信息。 也许应该有一个只有低级别东西的固定模式的数据库,然后是另一个更灵活的数据库,用于向用户报告信息。

仅将IDbInterceptor挂钩到EntityFramework DbContext一次

IDbCommandInterceptor接口没有很好的文档记录。 我只发现了一些稀缺的教程: http://www.entityframeworktutorial.net/entityframework6/database-command-interception.aspx https://msdn.microsoft.com/en-us/data/jj556606%28v=vs.113%29.aspx https://entityframework.codeplex.com/wikipage?title=Interception https://www.tutorialspoint.com/entity_framework/entity_framework_command_interception.htm https://msdn.microsoft.com/en-us/data/dn469464%28v=vs.113%29.aspx 还有一些问题: entity framework6 – 定时查询 从IDbCommandInterceptor的实现中获取DbContext 这些是我发现的挂钩建议: 1 – 静态DbInterception类: DbInterception.Add(new MyCommandInterceptor()); 2 – 在DbConfiguration类中执行上述建议 public class MyDBConfiguration : DbConfiguration { public MyDBConfiguration() { DbInterception.Add(new MyCommandInterceptor()); } } 3 – 使用配置文件: 虽然我无法弄清楚如何将DbConfiguration类挂钩到DbContext,也不知道如何将配置方法的type部分放入。 我发现的另一个例子似乎建议您编写记录器的命名空间: type=”System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework” 我注意到DataBaseLogger实现了IDisposable , IDbConfigurationInterceptor和 IDbInterceptor 。 IDbCommandInterceptor也实现了IDbInterceptor ,所以我尝试(没有成功)将其格式化为: type=”DataLayer.Logging.MyCommandInterceptor, DataLayer” 当我直接调用静态DbInterception类时,它在每次调用时都添加了另一个拦截器。 所以我的快速而肮脏的解决方案是利用静态构造函数: //This partial […]

从控制台应用程序记录SOAP消息

我正在尝试将我开发的控制台应用程序和特定的第三方远程SOAP Web服务之间的请求和响应(原始XML SOAP信封)记录到数据库以进行审计,我找不到办法。 理想情况下,我想做的是获取请求 Albireo 和响应 Hello, Albireo. 并将它们保存在数据库中。 到目前为止,我发现网上的每个教程都归结为两种方法,即SoapExtension方法和跟踪方法。 SoapExtension方法 SoapExtension方法基于SOAP Message Modification Using SOAP Extensions指南,在此方法中,您创建一个inheritance自SoapExtension的类并将其挂钩到应用程序的配置中,类的ProcessMessage方法将允许您拦截SOAP消息。 这是从SoapExtensioninheritance的类的示例: namespace Playground.Client { using System; using System.Web.Services.Protocols; public class SoapLogger : SoapExtension { public override object GetInitializer(System.Type serviceType) { throw new NotImplementedException(); } public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute) { throw new NotImplementedException(); } public override […]

将SQL注释添加到Linq生成的查询,以便它在SQL事件探查器中可见

我们希望将Linq to SQL用于项目。 这是我们第一次使用Linq。 通常我们只使用存储过程调用。 到目前为止,一切都运行良好,但DBA正在询问我们是否可以在Profiler中以可见的方式标记Linq生成的SQL查询。 我用Google搜索并搜索了Stackoverflow,并找到了各种方法来记录生成的SQL。 但那不是我想要的。 我认为如果我能将SQL注释粘贴到生成的SQL中,那将是理想的。 这会在Profiler中可见吗? 谢谢你的任何想法!

如何从app.config告诉log4net使用哪个appender

我有一个快速的log4net问题。 如何从app.Config中指定要使用的appender? 此特定配置文件引用2个不同的appender。 两者都是滚动文件追加器,但它们指向不同的文件。 在整个应用程序中,正在调用log4net并将类型传递给构造函数。 像这样… private static readonly ILog log = LogManager.GetLogger(typeof(Foo)); log4net如何知道选择哪个appender? 您可以将类型映射到特定的命名appender吗? 我知道GetLogger有5个构造函数,你能传递一个类型和一个appender名称吗? 我看到“repositoryName”,不知道那是什么。 如果有人能指出我正确的方向,我会非常感激。 我想要一组特定的类型来专门记录到一个appender。 谢谢你的任何提示, 〜在圣地亚哥

C#Log4Net – 以编程方式动态更改日志目录

我阅读了有关以编程方式更改日志目录的大多数相关主题,但答案有点高级。 我的问题是尝试动态更改从我的C#应用​​程序保存日志文件的位置。 我有一个带有浏览按钮的文本框,可以选择保存的位置。 任何人都有一个想法,或者可以用一些代码指出我正确的方向? 我尝试过类似的想法,但似乎无法做到正确。 谢谢您的帮助。 杰夫