- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我开发了一个使用 NLog 的 WPF 应用程序。它已部署到一些潜在客户,在其中一个中,该应用程序在一周内运行良好,但现在甚至打不开。也就是说,您双击应用程序图标,实际上什么也没有发生。甚至 AppDomain.CurrentDomain.UnhandledException
catch 子句中的日志记录也不行。
我能够在 Windows 事件查看器中识别一个事件(请参阅下面的消息)。
让我陷入困境的是在一周的完美操作后突然出现这个错误,而且我无法解释这个消息或在网上找到有关它的信息。
Aplicativo: ForceViewer.exe
Versão do Framework: v4.0.30319
Descrição: O processo foi terminado devido a uma exceção sem tratamento.
Informações da Exceção: System.Xml.XmlException
em System.Xml.XmlTextReaderImpl.Throw(System.Exception)
em System.Xml.XmlTextReaderImpl.ParseDocumentContent()
em System.Xml.XmlTextReaderImpl.Read()
em System.Xml.XmlTextReader.Read()
em System.Configuration.XmlUtil..ctor(System.IO.Stream, System.String, Boolean, System.Configuration.ConfigurationSchemaErrors)
em System.Configuration.BaseConfigurationRecord.InitConfigFromFile()
Informações da Exceção: System.Configuration.ConfigurationErrorsException
em System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean)
em System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(System.Configuration.ConfigurationSchemaErrors)
em System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors()
em System.Configuration.ClientConfigurationSystem.OnConfigRemoved(System.Object, System.Configuration.Internal.InternalConfigEventArgs)
Informações da Exceção: System.Configuration.ConfigurationErrorsException
em System.Configuration.ConfigurationManager.PrepareConfigSystem()
em System.Configuration.ConfigurationManager.get_AppSettings()
em NLog.Common.InternalLogger.GetSettingString(System.String, System.String)
em NLog.Common.InternalLogger.GetSetting[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.String, System.String, Boolean)
em NLog.Common.InternalLogger.Reset()
em NLog.Common.InternalLogger..cctor()
Informações da Exceção: System.TypeInitializationException
em NLog.Common.InternalLogger.Log(System.Exception, NLog.LogLevel, System.String)
em NLog.Internal.ExceptionHelper.MustBeRethrown(System.Exception)
em NLog.LogFactory.get_Configuration()
em NLog.LogFactory.GetLogger(LoggerCacheKey)
em NLog.LogFactory.GetLogger(System.String)
em NLog.LogManager.GetLogger(System.String)
em Miotec.ForceViewer.App..cctor()
Informações da Exceção: System.TypeInitializationException
em Miotec.ForceViewer.App.Main(System.String[])
这是我的 App.xaml.cs:
public partial class App : Application
{
static string AppName = "ForceViewer 1.1";
static readonly Mutex mutex = new Mutex(true, AppName);
// APPARENTLY the exception happens in the line below:
static readonly Logger logger = LogManager.GetLogger(typeof(App).FullName);
[STAThread]
public static void Main(string[] args)
{
SplashScreen splashScreen = new SplashScreen("Splash.png");
splashScreen.Show(true);
if (mutex.WaitOne(TimeSpan.Zero, true))
{
var app = new App();
app.InitializeComponent();
app.Run();
mutex.ReleaseMutex();
}
else
{
Extensions.EnviaMensagemPraAtivarOutraJanela();
}
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
WpfLauncher.Launch(this, new ForceViewerBootstrapper(AppName));
logger.Info($"Aplicação {AppName} iniciada");
}
}
更新(包含额外的、可能相关的信息):
有人提到 NLog XML 配置文件,但我使用的是运行时配置,如下所示:
var dirname = Path.Combine(@"C:\\AppFolder", appName, "logs");
Directory.CreateDirectory(dirname);
var filename = Path.Combine(dirname, $"{appName}.log");
var filetarget = new FileTarget("app")
{
FileName = filename,
Encoding = Encoding.UTF8,
Layout = "${longdate}|${level:uppercase=true}|${message} (${logger:shortName=true})",
AutoFlush = true,
MaxArchiveFiles = 8,
ArchiveAboveSize = 1048576,
ArchiveEvery = FileArchivePeriod.Friday,
ConcurrentWrites = true
};
var asyncTarget = new AsyncTargetWrapper("app", filetarget);
var config = new LoggingConfiguration();
config.AddRuleForAllLevels(asyncTarget);
config.AddTarget(asyncTarget);
LogManager.Configuration = config;
此外,“堆栈跟踪”(在 Windows 事件的情况下似乎是向后打印的)表明 NLog 本身正在从 System.Configuration
类中获取异常,如所见来自 InternalLogger
的反编译:
namespace NLog.Common { //... public static class InternalLogger { //... private static string GetSettingString(string configName, string envName) { // Line below seems to be throwing an exception string str = System.Configuration.ConfigurationManager.AppSettings[configName]; //..
最佳答案
可能您的 NLog (XML) 配置中存在配置错误。
那你为什么得到一个TypeInitializationException
而不是有用的消息?那是因为您在启动程序之前初始化了 NLog。线路:
static readonly Logger logger = LogManager.GetLogger(typeof(App).FullName);
将在 Main
之前运行因为它是一个静态字段。不幸的是,NLog 无法抛出更好的异常(参见:Better TypeInitializationException (innerException is also null))
建议:在这种情况下,建议使用非静态记录器,或者 static Lazy<Logger>
:
static readonly Lazy<Logger> logger = new Lazy<Logger>(() => LogManager.GetLogger(typeof(App).FullName));
关于c# - NLog LoggerFactory 中的 TypeInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50800113/
我想更改 nlog 布局,以便显示两个条目之间的时间。这样的布局可能吗? 这是我现在的输出,如果在时间旁边有自之前进入以来经过的秒数,那就太好了。 2012-05-20 19:18:41.09
使用 NLog v4.4.12,我的 App.config 中有这个 这是我的 Variables.xml 文件内容 但是我在启动我的应
我有一个名为 的自定义布局渲染器工作 .它提供了几个项目,它们在我们的 app.config 中是这样使用的: 当
NLog 是否可以发出多行消息,以便每行都根据当前布局进行格式化?例如。 2015-12-17 11:37:38.0845 | 64 | INFO | ------------------------
我刚开始玩 nlog,注意到 nlog.xml 文件与 nlog.dll 一起被带到了应用程序的输出文件夹中。我不太清楚该文件的用途以及我是否应该将它作为我的应用程序安装的一部分或可以安全地删除它。有
是否可以/容易使用 Rhino Mocks 或类似方法模拟 NLog 日志方法? 最佳答案 使用 Nuget:install-package NLog.Interface 然后:ILogger log
目标: 当我打电话时Logger.Error("some message", e) ,其中 e是一些异常对象,它只记录消息,不记录异常信息。我需要它来输出异常消息和堆栈跟踪。任何想法我做
在生产环境中更改 nLog 日志记录级别的最佳做法是什么。我可以更改它的唯一方法是修改 NLog.config 文件,然后回收应用程序池。应该这样吗? 谢谢, 克里斯 最佳答案 如果你想改变日志配置而
我已经创建了一个通用实现 ILogger 并在这个包装器中实现了 NLog 实现方法。我的问题是我在我的解决方案中为整个 namspace 启用了错误严重性,但我还希望对“Employee”命名空间下
我在 NLog.config 中配置了两条规则: 我正在尝试使用以下代码写入第一个: LogEventInfo eventInfo = new LogEventInfo(); eventInfo.
我正在尝试将一堆应用程序使用的现有日志记录库转换为使用 NLog。现有的日志记录代码没有间接性,日志记录调用直接从调用者到 Web 服务调用。现有的日志记录代码是作为静态单例实现的。我需要以这样一种方
我有一个泛型类: public class GenericClass { private static readonly Logger Logger = LogManager.GetCurre
在我看来,NLog 中的内置日期格式没有正确包含时区。我们需要用尾随 Z 记录 UTC 时间,以便 Splunk 知道本地时间是什么,例如: {日期:universalTime=true:format
我们提供了一个用于日志记录的框架程序集,它在内部使用 nlog。我们还提供了一个嵌入式 nlog 配置作为我们程序集中的资源,并在启动时读取它(包装器中的静态构造函数,它使用 XmlLoggingCo
我这样编码: private static readonly ILogger Logger = LogManager.GetCurrentClassLogger(); public MyClass()
现在我这样做 LogManager.DisableLogging(); 但这需要再次部署我的代码,如何从 nlog 配置文件中禁用登录。 最佳答案 关于nlog - 从 Nlog.config 发
我想弄清楚如何阻止 NLog 替换我正在记录的字符串中的换行符。我希望输出包含所有换行符,而不是将整个输出放在一行中。 有人可以帮忙吗? 配置: 代码
作为从 NLog 切换到 Serilog 的一个步骤,我想重定向 NLog 的 LogManager.GetLogger(name) 的标准调用的标准接线,以桥接任何记录到 NLog 的代码,以便立即
为此,我需要一份详细/分步指南。我已经阅读了简要指南 ( example here ) 并下载了示例代码,但我仍然无法弄清楚如何使用 Nlog 登录到 CloudWatch。 当我在 NLog.con
我将 NLog 错误电子邮件文本的内容放入一个文件中,并使用 FileContents 渲染器进行渲染。如果布局渲染器产生空字符串,我想做的是隐藏 html 输出的某些部分 Request ticke
我是一名优秀的程序员,十分优秀!