- 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/
我正在努力提高我的 Java 优化技能。为了实现这一目标,我制作了一个旧程序,我正在尽最大努力让它变得更好。在这个程序中,我使用 SL4J 进行日志记录。为了获得记录器,我做了: private st
当通过 Java 代码运行 Hadoop 时,LoggerFactory 对象用法的输出到哪里去了?如何跟踪这个记录器? 最佳答案 如果您的 LoggerFactory 对象是 slf4j api 的
我有一个问题我还没有找到答案。那么这两条线有什么区别呢? private static final Logger LOGGER = LoggerFactory.getLogger(MyClass.cl
我设置了一个基本的 Java 程序。我正在关注这个tutorial并有这个确切的代码: import org.slf4j.Logger; import org.slf4j.LoggerFactory;
这可能很简单,但我已经浪费了很多时间来寻找解决方案。 我有 package net.rubyeye.xmemcached; ... import org.slf4j.Logger; import or
我使用 Microsoft.Extensions.Logging 创建了一个使用服务层的控制台应用程序。 Program.cs public static void Main(string[] arg
我想读取一个项目的 iCalendar(ics 文件),并认为仅使用 API 可能会更容易。经过大量研究,我发现了 iCal4j。 我是 ical4j 的新手,一直在寻找答案,并尝试进行研究,发现它的
我目前正在实现一个记录器,我想知道为什么代码无法运行。大多数代码片段都是这样的: Logger log = LoggerFactory.getLogger(this.getClass()); 我导入的
所以, 我正在使用这个示例 BONECP : package javasampleapps; import java.sql.Connection; import java.sql.ResultSet
我已经阅读了大量帖子和文档(在本网站和其他地方),指出 SFL4J 日志记录的推荐模式是: public class MyClass { final static Logger logger
再会。 我正在尝试通过在我的自定义 ActionFilterAttribute 类中注入(inject) LoggerFactory 来使用日志记录,但是在其中一个 Controller 方法中使用
ConsoleLoggerProvider有四个构造函数: ConsoleLoggerProvider(IConsoleLoggerSettings) ConsoleLoggerProvider(IO
我已经从 http://search.maven.org/#search%7Cga%7C1%7Chikaricp 下载了 HikariCP JAR (第五行)并将其放置在我的构建路径中。如果你打电话
我开发了一个使用 NLog 的 WPF 应用程序。它已部署到一些潜在客户,在其中一个中,该应用程序在一周内运行良好,但现在甚至打不开。也就是说,您双击应用程序图标,实际上什么也没有发生。甚至 AppD
我正在使用 espai ESAPI 对字符串值进行编码以解决跨站点脚本问题,如下所示(代码片段)。 String encodedString = ESAPI.encoder().encodeForHT
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在尝试运行 GWT RequestFactory 并遇到此错误: ClassNotFoundException: org.slf4j.LoggerFactory 我尝试下载slf4j-api-1.
在 kotlin 中使用 SLF4J 或其他日志记录方法最方便的方法是什么? 通常开发人员忙于处理样板代码,例如 private val logger: Logger = LoggerFactory.
我只是想借助gradle和应用程序插件为我的应用程序创建可运行的* .jar文件。 构建过程没有错误, list 文件可以正常运行,等等,但是在运行* .jar文件时会发生以下情况: java.lan
我想使用 Java 在 Sonarqube 中构建一个自定义规则,它可以捕获这种情况的发生: import org.slf4j.Logger; import org.slf4j.LoggerFacto
我是一名优秀的程序员,十分优秀!