我试图将日期添加到我的日志文件名中,并且能够遵循我在Stackoverflow中发现的一些建议来使其正常工作。一切正常,但是由于某种原因,第一个文件总是在附加的日期两次。

例如,而不是 log.2009-02-23.log, ,我明白了 log.2009-02-23.log.2009-02-23.log.

我发现它很奇怪,仅供参考,这是一个非常简单的代码。这并不是说我在多线程环境中运行它。

我的log4net配置:

<log4net>
<appender name="MyLog" type="log4net.Appender.RollingFileAppender">
    <file value="../../Logs/Mylog"/>
    <staticLogFileName value="false" />
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <datePattern value=".yyyy-MM-dd.lo\g" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{DATE} [%t] %-5p %c - %m%n"/>
    </layout>
</appender>
<root>
    <level value="INFO"/>
    <appender-ref ref="MyLog"/>
</root>
</log4net>

有什么想法吗?

编辑:我想添加有关正在测试的环境的信息。
- ASP.NET
- .NET框架2.0
-Windows Server 2003 64位服务包2
-log4net 1.2.10

有帮助吗?

解决方案 2

这是一个许可问题。至少那是我正在发生的事情。

我是新手使用log4net的新手,所以我不知道它具有内部记录,但我找到了它,所以我尝试了 内部记录 上。我不太确定它在说什么,但这对我来说是在做什么:1。将日期附加到文件名。 2.尝试访问文件以写入它(失败)。 3.将日期附加到文件名 再次。 4.成功访问文件(现在有怪异的文件名)

在我不知道这一点之前,我是Google-ing-ing来解决此问题的解决方案,例如我在这个stackoverflow问题上拥有的标题。那里没有太多信息。我发现也许一个人说这发生在某些人身上,但从未真正解释过为什么也没有解决方案。有了这些新信息(+log4net中的内部错误消息),我正在查看搜索引擎的不同线程。因此,我发现这可能是一个许可问题。

看来写作应用程序没有足够的日志文件夹的权限。应用程序的默认身份通常是网络_Service。在我授予更多许可之后(我给了它完全控制,但我不知道该文件夹的最低限度是什么,它可以正常工作。

如果有人能比我更好地解释这一点,请随时编辑。

其他提示

如果您初始化日志系统时,访问日志文件存在问题,则会发生这种情况。如果您两次初始化日志系统,如果您在其他副本运行并写入日志文件时,或者在文本编辑器中编辑日志文件时,可能会发生这种情况。基本上,当log4net Init运行时,任何导致日志文件上写入锁定的内容。

检查您的代码是否重复调用log4net Init-也许您是在构造函数中初始化的,而不是在Singleton的静态构造函数或全局初始化中进行初始化。

如果您在“ Web Garden”配置中运行并且不包含文件名中的PID,则可能会发生这种情况,因为每个不同的Web服务器进程都试图写入同一文件。如果使用网络花园并将其写入文件,请将PID添加到文件名模式中,以便每个服务器进程都会获取自己的文件。

我遇到了同样的问题。对我来说,这是将RollingFileAppender用于我的测试日志的组合,并使用Resharper进行Nunit测试。

事实证明Resmanper使用 运行测试的过程:

2 TaskRunners

在日志文件上创建种族条件。

现在,如果我们将日志文件名更改为包括流程ID:

<appender name="MyLog" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="MyLog.pid.%processid" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="false"/>
  <datePattern value="_yyyy-MM-dd'.log'"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{HH:mm:ss.fff} [%15.15t] %-5p '%40.40c' - %m%n" />
  </layout>
</appender>

问题已经解决了。每个文件都有自己的独特名称:

mylog.pid.5440_2010-10-13.log
mylog.pid.1496_2010-10-13.log

注意使用 图案串 对于“类型”。

希望有帮助。

正如奥尔指出的那样。您的问题与“ g”有关,您的log4net将其解释为另一个dateformat。尝试删除“ .yyyy-mm-dd.lo g”并用“ yyyy-mm-dd”代替它

“ .log”不属于dateformat

我使用以下内容:

<param name="DatePattern" value="yyyy.MM.dd.\l\o\g"/>

有了这个我的文件名,例如:2009.02.23.log

尝试 <datePattern value=".yyyy-MM-dd.lo\g" /> 我不明白 g的用途。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top