在我们的C#应用程序中,我们将文件写入Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).我们的log4net日志文件也应该去那里,所以我们定义application.conf如下:
<appender name="LogFile" type="log4net.Appender.RollingFileAppender">
<appendToFile value="true"/>
<file value="%USERPROFILE%\My Documents\MyApp\log.txt"/>
...snip...
</appender>
Run Code Online (Sandbox Code Playgroud)
这是有效的,直到我们在具有非英语Windows的PC上运行.因为那时,SpecialFolder.MyDocuments指向文件夹Mijn Documenten,而日志仍然转到My Documents.随之而来的是混乱,因为现在我们的文件分布在两个地方.
我想将我的日志写入"真正的"我的文档文件夹.我该怎么做呢?
%USERPROFILE%,但似乎没有My Documents的存在.application.conf.我试图以File编程方式覆盖我的appender参数,如下所示:
public static void ConfigureLogger()
{
XmlConfigurator.Configure();
Hierarchy hierarchy = (Hierarchy)log4net.LogManager.GetRepository();
foreach (var appender in hierarchy.Root.Appenders)
{
if (appender is FileAppender)
{
var fileAppender = appender as FileAppender;
var logDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "MyApp");
var pathElements = fileAppender.File.Split(Path.DirectorySeparatorChar);
var logFileName = pathElements.Last();
var fullLogFilePath = Path.Combine(logDirectory, logFileName);
fileAppender.File = fullLogFilePath;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这也不起作用:当我检查记录器的内部时,该File属性很高兴地报告Mijn Documenten,但同时日志仍然存在My Documents.
我的想法已经用完了!
sgm*_*ore 10
改变线
<file value="%USERPROFILE%\My Documents\MyApp\log.txt"/>
Run Code Online (Sandbox Code Playgroud)
至
<file type="log4net.Util.PatternString" value="%envFolderPath{MyDocuments}\MyApp\log.txt" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3451 次 |
| 最近记录: |