Log4Net 创建空日志文件,而不是实际记录
Log4Net creating empty log files, not actually logging
我在应用程序中使用 Log4Net 时遇到问题。这是我的 app.config 文件...
<configuration>
<log4net>
<root>
<level value="INFO"/>
<appender-ref ref="FileAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="mylogfile.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
</appender>
</log4net>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"
/>
rest of app.config under here...
这是我 Program.cs
的顶部
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
我的部分表格顶部也有这个 class(这是上面的副本吗?)
private static readonly log4net.ILog log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
并且这段代码在表单加载中(什么都不做)
log.Info("Initializing...");
log.Fatal("blah");
记录器创建了一个名为 "mylogfile.txt" 的日志文件,但实际上并未向其中写入任何内容。
我知道我做错了什么,但我无法轻易发现它是什么:(任何帮助都会很棒。
http://log4net.sourceforge.net/release/1.2.0.30316/doc/manual/faq.html
来自文档:
How do I enable log4net internal debugging?
• 要以编程方式启用 log4net 的内部调试,您需要将 log4net.helpers.LogLog.InternalDebugging 属性 设置为 true。显然,设置得越早,产生的调试就越多。
• 也可以通过在应用程序的配置文件中设置一个值来启用内部调试(不是 log4net 配置文件,除非 log4net 配置在应用程序的配置文件中)。 log4net.Internal.Debug 应用程序设置必须设置为值 true。例如:
启动时会立即读取此设置,这将导致发出所有内部调试消息。
• 要从配置文件启用内部调试,可以将 log4net 配置元素上的 debug 属性设置为值 true。例如:
... configuration ...
使用此方法确实需要找到并加载您的配置文件,否则将不会读取该属性。如果您需要调试定位配置文件的过程,请使用其他方法之一来启用调试。
内部调试消息被发送到控制台和 System.Diagnostics.Trace 系统。如果应用程序没有控制台,记录在那里的消息将会丢失。请注意,应用程序可以通过设置 System.Console.Out 来重定向控制台流。 Trace 系统默认将消息发送到附加的调试器(消息将出现在输出 window 中)。如果进程没有附加调试器,则消息将发送到系统调试器。 http://www.sysinternals.com 中的 DebugView 等实用程序可用于捕获这些消息。
几秒钟后我自己弄明白了。 app.config 是错误的(毫不奇怪,考虑到它是我写的)。
这是工作 app.config 启动。
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"
/>
<--- other section groups here, you will have these too --->
</sectionGroup>
</configSections>
<log4net>
<root>
<level value="INFO"/>
<appender-ref ref="FileAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="mylogfile.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
</appender>
</log4net>
我罐装了
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
并将其替换为log4net.Config.XmlConfigurator.Configure(); (在这里,它在 Program.cs 的主程序启动中被调用)。
static void Main()
{
log4net.Config.XmlConfigurator.Configure();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMOEBackup());
}
而且有效!感谢所有看过我问题的人:)
我遇到了同样的问题。
对于我的修复,我必须删除
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
来自我的 assemblyInfo.cs,如果您在代码中调用 log4net.Config.XmlConfigurator.ConfigureAndWatch()。
连我也遇到了同样的问题,找啊找,终于找到了问题所在。
****第一个:****
在 app.config 文件
中添加以下代码
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-3level %logger : %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="..\..\Test_Output\testLogFile.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-3level %logger : %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
****第二:****
您需要提及您的 log4net 所在位置,并且 Watch 应该是 true
[程序集:log4net.Config.XmlConfigurator(ConfigFile = "app.config", Watch = true)]
****最后:****
您需要在您的 BaseClass 或 Class 中提及您想要记录的位置:XmlConfigurator.Configure();
***希望它会起作用。
我在应用程序中使用 Log4Net 时遇到问题。这是我的 app.config 文件...
<configuration>
<log4net>
<root>
<level value="INFO"/>
<appender-ref ref="FileAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="mylogfile.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
</appender>
</log4net>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"
/>
rest of app.config under here...
这是我 Program.cs
的顶部[assembly: log4net.Config.XmlConfigurator(Watch = true)]
我的部分表格顶部也有这个 class(这是上面的副本吗?)
private static readonly log4net.ILog log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
并且这段代码在表单加载中(什么都不做)
log.Info("Initializing...");
log.Fatal("blah");
记录器创建了一个名为 "mylogfile.txt" 的日志文件,但实际上并未向其中写入任何内容。
我知道我做错了什么,但我无法轻易发现它是什么:(任何帮助都会很棒。
http://log4net.sourceforge.net/release/1.2.0.30316/doc/manual/faq.html
来自文档:
How do I enable log4net internal debugging?
• 要以编程方式启用 log4net 的内部调试,您需要将 log4net.helpers.LogLog.InternalDebugging 属性 设置为 true。显然,设置得越早,产生的调试就越多。
• 也可以通过在应用程序的配置文件中设置一个值来启用内部调试(不是 log4net 配置文件,除非 log4net 配置在应用程序的配置文件中)。 log4net.Internal.Debug 应用程序设置必须设置为值 true。例如:
启动时会立即读取此设置,这将导致发出所有内部调试消息。
• 要从配置文件启用内部调试,可以将 log4net 配置元素上的 debug 属性设置为值 true。例如:
... configuration ...
使用此方法确实需要找到并加载您的配置文件,否则将不会读取该属性。如果您需要调试定位配置文件的过程,请使用其他方法之一来启用调试。
内部调试消息被发送到控制台和 System.Diagnostics.Trace 系统。如果应用程序没有控制台,记录在那里的消息将会丢失。请注意,应用程序可以通过设置 System.Console.Out 来重定向控制台流。 Trace 系统默认将消息发送到附加的调试器(消息将出现在输出 window 中)。如果进程没有附加调试器,则消息将发送到系统调试器。 http://www.sysinternals.com 中的 DebugView 等实用程序可用于捕获这些消息。
几秒钟后我自己弄明白了。 app.config 是错误的(毫不奇怪,考虑到它是我写的)。
这是工作 app.config 启动。
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"
/>
<--- other section groups here, you will have these too --->
</sectionGroup>
</configSections>
<log4net>
<root>
<level value="INFO"/>
<appender-ref ref="FileAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="mylogfile.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
</appender>
</log4net>
我罐装了
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
并将其替换为log4net.Config.XmlConfigurator.Configure(); (在这里,它在 Program.cs 的主程序启动中被调用)。
static void Main()
{
log4net.Config.XmlConfigurator.Configure();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMOEBackup());
}
而且有效!感谢所有看过我问题的人:)
我遇到了同样的问题。
对于我的修复,我必须删除
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
来自我的 assemblyInfo.cs,如果您在代码中调用 log4net.Config.XmlConfigurator.ConfigureAndWatch()。
连我也遇到了同样的问题,找啊找,终于找到了问题所在。
****第一个:**** 在 app.config 文件
中添加以下代码 <log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-3level %logger : %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="..\..\Test_Output\testLogFile.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-3level %logger : %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
****第二:**** 您需要提及您的 log4net 所在位置,并且 Watch 应该是 true
[程序集:log4net.Config.XmlConfigurator(ConfigFile = "app.config", Watch = true)]
****最后:**** 您需要在您的 BaseClass 或 Class 中提及您想要记录的位置:XmlConfigurator.Configure();
***希望它会起作用。