c# - Log4net 输出到我的文档

标签 c# log4net

在我们的 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>

这一直有效,直到我们在装有非英语 Windows 的 PC 上运行。因为那时,SpecialFolder.MyDocuments 指向文件夹 Mijn Documenten,而日志仍然转到 My Documents。随之而来的是困惑,因为现在我们的文件在两个地方。

我想将我的日志写入“真实的”我的文档文件夹。我该怎么做?

  • 我试图找到类似 %USERPROFILE% 的环境变量,但我的文档似乎不存在。
  • 有一个注册表项定义了我的文档的真实位置,但它不能从 application.conf 访问。
  • 我试图以编程方式覆盖我的 appender 的 File 参数,如下所示:

    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;
            }
        }
    }
    

    这也不起作用:当我检查记录器的内部时,File 属性很高兴地报告 Mijn Documenten,但与此同时,日志仍然存在到我的文档

我的想法已经用完了!

最佳答案

换行

<file value="%USERPROFILE%\My Documents\MyApp\log.txt"/>

<file type="log4net.Util.PatternString" value="%envFolderPath{MyDocuments}\MyApp\log.txt" />

关于c# - Log4net 输出到我的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18364691/

相关文章:

c# - Entity Framework 6 过滤子对象

c# - 从 winform 应用程序中的 Combobox 读取值

logging - (为什么)log4net 不再开发了吗?

c# - 从 powershell 脚本记录到 csharp 程序(log4net - 日志文件)

c# - 如何通过代码启用/禁用存储在配置中的日志记录和文件附加信息?

C# - 以编程方式尝试检查代码块中的内存泄漏的方法

c# - 非托管 C++ Win32 API 或 C#?

.net - Log4Net 配置问题

logging - 如何在不违反坚实原则的情况下正确实现日志记录?

c# - 同一方法.net core web api上的多种类型[FromBody]