草庐IT

c# - 用于记录方法调用和异常的 WCF 服务属性

我需要记录WCF服务中的每个方法调用以及抛出的所有异常。这导致了很多冗余代码,因为每个方法都需要包含类似于这样的样板文件:[OperationContract]publicResultBaseAdd(intx,inty){varparameters=newobject[]{x,y}MyInfrastructure.LogStart("Add",parameters);try{//actualmethodbodygoeshere}catch(Exceptionex){MyInfrastructure.LogError("Add",parameters,ex);returnnewResul

c# - 在 WCF 中记录错误的最佳方式

开发WCF服务层时捕获和记录错误的最佳方法是什么?为什么?我可以想到三种方法,1)围绕每个方法手动尝试/捕获。2)将责任留给WCF引擎。3)使用第三方库,例如企业库策略注入(inject)/日志记录。 最佳答案 我会实现自定义IErrorHandler并使用log4net[AttributeUsage(AttributeTargets.Interface)]publicclassErrorPolicyBehaviorAttribute:Attribute,IContractBehavior,IErrorHandler{private

c# - 如何将 NLog 用于 DLL

我正在尝试使用NlogRefresh1.0为类库项目实现一个简单的日志。从dll中实例化时,nlog似乎不会创建日志文件。还有其他解决方法吗?我的配置文件是这样的:我知道这个配置没有任何问题,因为它在一个exe项目中工作。编辑:只是为了澄清:我无法访问使用我的dll作为插件的调用程序。调用程序实际上是outlook,它使用我的dll作为插件。我想保留一个日志,它只与我的dll相关,与outlook本身无关。 最佳答案 您必须将nlog.config添加到使用dll的exe文件的位置!编辑:您不必修改exe文件,只需将nlog.con

c# - Log4Net 在单独的配置文件中

我需要为一个新项目配置log4net。当我将所有信息保存在App.config文件中时,一切正常。我想把log4net的配置放在一个单独的配置文件中(拿App1.config)这是我的app.config完美运行:我删除了除之外的所有内容从我的app.config元素并将其放入我的app1.config中:在我的Program.cs类中,我用这样的程序集调用配置:[assembly:log4net.Config.XmlConfigurator(ConfigFile="App1.config",Watch=true)]但是当我使用App1.config时,我的文件中没有日志。

c# - 复合应用程序的最佳日志记录方法?

我正在创建一个包含多个不同项目(Shell、模块等)的复合WPF(Prism)应用程序。我正准备使用Log4Net实现日志记录。似乎有两种方法可以设置日志记录:让Shell项目执行所有实际日志记录。它获取对Log4Net的引用,其他项目触发复合事件让Shell知道它需要记录一些东西。这些项目仅针对在Shell的app.config文件中打开日志记录的级别(DEBUG、ERROR等)触发事件,以免降低性能。为每个项目(包括模块)提供一个Log4Net引用,并让项目自己记录到一个公共(public)日志文件,而不是将消息发送到Shell进行记录。哪种方法更好?或者,我应该考虑另一种方法吗?

c# - GDPR : Encrypted logging in C#

加密日志文件作为保护其中可能包含的个人数据的一种方法的建议很普遍。我还没有看到一个很好的引用实现,考虑到有多少公司需要它,这令人惊讶。在我们的特殊情况下,我们希望使用公钥加密,这样文件就无法在生成它们的(保护较弱的)系统上读取,并且必须被发送回我们可以查看它们的总部。到目前为止,我看到的最好的建议是“使用log4net,但使用来自BouncyCaSTLe的RFC3852流式实现来编写您自己的附加程序”。有人对此有进展吗? 最佳答案 从技术上讲,加密您的日志消息应该非常容易。使用像Serilog这样的东西你可以简单地创建一个custo

c# - 如何检测我是否在控制台中运行

有没有一种简单的方法可以让代码库自动检测它是从控制台应用程序还是从Windows应用程序调用的?我希望我的库在从控制台窗口调用时不向Windows事件日志报告,而是向控制台窗口报告。但是,如果它不是在控制台窗口中运行,它应该向Windows事件日志报告。我考虑过要求我的日志记录组件传递日志目标,但如果它能在native自动处理这两个目标就更好了。我还不需要像log4net这样广泛的东西,事实上,如果有必要提供对数据库/文件和其他未知日志记录目标的支持,那么我可能会推荐这样的解决方案。不过现在,只要让我的组件自动检测环境并根据环境记录到控制台或事件日志就足够了。

c# - 在 log4Net 中关闭记录器实例的正确方法

我有一个类,我为其每个实例创建了一个新的记录器,并为其附加了一个缓冲区附加程序和一个动态附加程序。一切都在运行时完成,没有从配置文件中提取任何信息。现在要在类的自定义处置方法中释放资源,我需要关闭该特定记录器并释放其所有附加资源以避免任何内存泄漏。目前我一直在做的是至少刷新文件附加程序并写入所有日志信息,但既不会释放对该特定日志文件的锁定,也不会释放其任何资源。关闭记录器而不关闭其他正在处理的事件记录器的正确方法是什么log4net.ILoglog=log4net.LogManager.GetLogger(loggerName);foreach(IAppenderiappinlog.L

c# - Log4Net 性能

我编写了一个C#应用程序,它在一个循环中持续运行,多个线程写入一个log4net文件。问题是应用程序运行的时间越长,完成循环所需的时间就越多。我运行了ANTS性能分析器,并注意到大部分CPU时间都花在了使用log4.net进行日志记录上。日志越详细,它使用的CPU就越多,30分钟后它就使用了100%的CPU。如果我禁用日志记录,循环所花费的时间会随着时间的推移保持不变。我查看了Windows性能监视器,物理磁盘大部分时间处于空闲状态。我已尝试将日志记录保持在最低限度,但即使日志记录量相对较少,我仍然遇到问题。这是我的Log4net.xml配置文件的示例:我使用来自每个记录对象的相同记录

c# - Serilog - 多个日志文件

我正在使用Serilog进行日志记录,但无法弄清楚如何将日志事件分离到不同的文件中。例如,我想将错误记录到error_log-ddmmyyyy.txt,将警告记录到warn_log-ddmmyyyy.txt。这是我的记录器配置:Log.Logger=newLoggerConfiguration().WriteTo.Logger(lc=>lc.Filter.ByIncludingOnly(Matching.WithProperty("Level","Warning")).WriteTo.RollingFile(Path.Combine(AppDomain.CurrentDomain.Ba