【发布时间】:2016-10-25 21:52:22
【问题描述】:
我目前有一个 app.config,其中包含我的 Log4Net 配置的设置。这里的问题是,如果用户删除了 exe.config,那么它不会记录任何内容,因为没有配置记录器。
除了记录器之外,我还需要在配置中设置其他内容(将来)。所以我想做的只是将默认的 exe.config 写入它应该在的位置,但我找不到正确执行此操作的方法。
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="..\Logging\ModuleSimulator.txt"/>
<appendToFile value="false"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="10000000"/>
<staticLogFileName value="false"/>
<rollingStyle value="Size"/>
<PreserveLogFileNameExtension value="true"/>
<layout type="log4net.Layout.PatternLayout">
<header value="[Header]
" />
<footer value="[Footer]
" />
<conversionPattern value="%date [%2thread] %-5level %logger - %message%newline%exception"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<LevelMin value="DEBUG"/>
<AcceptOnMatch value="true"/>
</filter>
</appender>
<root>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
</configuration>
如果我发现原件不见了,我是否应该将此文本保存在代码中并将其另存为文档?肯定有更好的方法。
我知道如何在代码中配置我的记录器,所以我只需要一种将它保存在新配置文件中的方法:Can you configure log4net in code instead of using a config file?
我检测到什么时候没有配置文件:
var exeConfiguration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if (exeConfiguration.HasFile == false)
{
// TODO: create the config in code
// Save the config in code
}
我需要的只是一种将新配置保存在代码中的方法,以便它创建一个类似的文件。我想知道除了将整个 xml 文件保存在字符串(或资源)中,然后当我发现配置文件丢失时将其写入文件之外,是否还有其他方法。
我希望找到一种方法来使用 ConfigurationManager 或其他一些 .Net 组件在启动时配置我的应用程序,而不是使用它来执行以下操作:Configuration.Save(); 我会接受这个新创建的文件中的所有更改在应用程序重新启动之前不会被使用,这不是问题。
【问题讨论】:
-
用户如何删除您的 App.Config 文件?
-
@viveknuna 他使用文件资源管理器转到执行路径,选择文件并按删除。
-
但这不应该被允许
-
如果您没有检测到 app.config 文件或没有配置记录器(app.config 已更改),您也可以通过编程方式配置 log4net。
-
简单的解决方案是检测丢失的配置部分,然后继续运行或终止应用程序。您可能希望有选择地让最终用户知道缺少关键配置并且服务 X 将不可用。此外,您可以增加复杂性并检查文件版本和校验和,并尝试从远程服务器中提取最新版本,作为应用程序的公开更新服务。我会回避制作备份副本,因为一旦删除了卷影副本,您将陷入同样的困境。
标签: c# app-config