【问题标题】:Is there a way to hide the main file from log4net c#?有没有办法从 log4net c# 中隐藏主文件?
【发布时间】:2020-04-29 09:19:09
【问题描述】:

有没有办法隐藏用于 log4net c# 的主文件? 当你使用 log4net 时,你在配置文件中设置了创建日志文件并在那里记录的路径。 路径中的文件名是发生日志记录的地方,基于此,我每小时记录一些内容时都会创建一个文件。

我可以将文件设置为隐藏,但我无权访问它。

您能否帮我提供一个解决方案,我仍然可以根据配置文件每小时创建日志文件,但进程访问的主文件被隐藏?我一直在寻找类似的东西,但我什么也没找到。

这是我使用的代码:

<appender name="ExampleLog" type="RollingFileAppender">
    <file value="Logs/Log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="yyyyMMddHH" />
    <maxSizeRollBackups value="240" />
    <maximumFileSize value="20MB" />
    <CountDirection value="1" />
    <PreserveLogFileNameExtension value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date{yyy/MM/dd    HH:mm:ss:fff} %message%newline" />
    </layout>
  </appender>

public override void OpenFile(string fileName, bool append)
{
      fileName = File;
      FileInfo fileInfo = new FileInfo(fileName);
      fileInfo.Attributes = FileAttributes.Hidden;
      base.OpenFile(fileName, append);
}

【问题讨论】:

  • 你指的是什么“主文件”?
  • 到 Log.txt,我希望隐藏该文件,但基于此每小时创建文件。如您所见,我在配置中设置了 dataPattern,用于每小时创建一个文件,但是当我将 Log.txt 设置为隐藏时,该文件夹也被隐藏

标签: c# log4net


【解决方案1】:

简而言之:将当前日志文件放在隐藏的子文件夹中,将滚动文件放在根文件夹中。无需重写代码中的 appender。

详情: 您的 log4net 配置应如下所示:

  <appender name="ExampleLog" type="log4net.Appender.RollingFileAppender">
    <file value="Log\\Current\\.log" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="'..\\'yyyyMMddHH" />
    <maxSizeRollBackups value="240" />
    <maximumFileSize value="20MB" />
    <CountDirection value="1" />
    <PreserveLogFileNameExtension value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date{yyy/MM/dd    HH:mm:ss:fff} %message%newline" />
    </layout>
  </appender>

请注意,文件值没有文件名,并且 dataPattern 有一个前导 '..\\'。此外,PreserveLogFileNameExtension 应设置为 true。

您可以创建子文件夹 (Current) 并以编程方式将其隐藏一次。

【讨论】:

  • 嗨,很抱歉回答迟了,我试过你的方法,它确实很有帮助,但是当我尝试以编程方式隐藏子文件夹时,它并没有完全隐藏,很容易看到,但仍然是你的答案非常好,因为现在我可以尝试其他方法,一种将每小时创建的每个文件移动到文件夹中的方法,因为这就是我的文件夹所需要的
  • 你的意思是它没有完全隐藏。第一次“由 log4net”创建文件夹时,它不会隐藏。因此,最好在 log4net 启动之前创建“log\\curret”文件夹(如果它不存在)并将其隐藏。
  • 好吧,我教你说用log4net创建,我的错,我会像你说的那样试试
猜你喜欢
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 2016-05-29
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 2021-04-28
相关资源
最近更新 更多