我正在运行Visual Studio 2008 - 并且遇到log4net日志记录问题(v1.2.10)。 我有一个小的控制台测试程序,只有一个日志语句。 我为RollingLogFileAppender和ConsoleAppender配置了log4net。
当我从命令行运行编译的exe时,我看到在运行时目录中正确创建了日志文件。创建日志文件(或附加到日志文件时,如果存在),但唯一的输出是配置的[标题]和[页脚]。控制台没有输出。
但是,当我在调试器下运行时,日志消息会出现在日志文件和控制台上。以下是我的log4net配置:
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
</appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="quicktest-log-" />
<appendToFile value="true" />
<immediateFlush value="true" />
<datepattern value="yyyy-MM-dd" />
<maxSizeRollBackups value="100" />
<maximumFileSize value="1048576" />
<rollingStyle value="Composite" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<header value="[Begin Quicktest program log] " />
<footer value="[End Quicktest program log] " />
<conversionPattern value="%date{HH:mm:ss} [%thread] %-5level %logger: %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
答案 0 :(得分:2)
这个理论可能是一个延伸,但你确保app.config已被复制到你的可执行文件所在的文件夹中吗?必须将App.config复制到输出可执行文件所在的位置,并且还必须将其重命名为&lt; executablename&gt; .config,因此如果您的可执行文件是MyProgram.exe,则config必须位于MyProgram.exe.config中。
答案 1 :(得分:1)
它现在正在运作,但神秘感仍然存在。显然,大量的中式自助餐是解决这类问题的唯一方法,因为一旦我有了这个问题,问题就会消失。
我的测试程序是带
的单个文件class Test
{
static void Main (string[] args)
{
.
. // some logging attempted here.
.
}
}
当我最初遇到问题时,我正在Main()
内进行记录。之后,我在类Test上创建了一个方法,在Main中实例化了类Test,并将日志记录移动到了方法中。这解决了这个问题:
class Test
{
static void Main (string[] args)
{
var p = new Test();
p.Go ();
}
public void Go ()
{
. // some logging here.
}
}
这仍然没有定论。我把它原来的方式移回去了,它开始工作了。所以,我必须得出结论,这个难题的答案是:不要尝试没有中国食物的第一次log4net测试程序。
答案 2 :(得分:1)
我遇到了同样的问题,我正在进行clickonce部署。
我发现我需要在Project属性中添加log4net.xml&gt;发布&gt; ApplicationFiles并将此log4net.xml作为数据文件。