为什么使用Log4NNET时在文件名上附加了两次日期?
-
06-09-2019 - |
题
我试图将日期添加到我的日志文件名中,并且能够遵循我在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使用 二 运行测试的过程:
在日志文件上创建种族条件。
现在,如果我们将日志文件名更改为包括流程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的用途。