我的应用程序中的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)]
我也在表单部分类的顶部有这个(这是上面的副本吗?)
private static readonly log4net.ILog log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
此代码在表单加载(无效)
log.Info("Initializing...");
log.Fatal("blah");
记录器创建一个名为&#34; mylogfile.txt&#34;的日志文件。但实际上并没有写任何东西。
我知道我做错了什么,但我无法发现它很容易:(任何帮助都会很棒。
答案 0 :(得分:2)
以下是正在运行的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());
}
它有效!感谢所有查看我问题的人:)
答案 1 :(得分:0)
http://log4net.sourceforge.net/release/1.2.0.30316/doc/manual/faq.html
来自文档:
如何启用log4net内部调试?
•要以编程方式启用log4net的内部调试,您需要将log4net.helpers.LogLog.InternalDebugging属性设置为true。显然,设置越快,将产生越多的调试。
•也可以通过在应用程序的配置文件中设置一个值来启用内部调试(不是log4net配置文件,除非log4net配置在应用程序的配置文件中)。必须将log4net.Internal.Debug应用程序设置设置为值true。例如:
此设置在启动时立即读取,将导致所有内部调试消息被释放。
•要从配置文件启用内部调试,可以将log4net配置元素上的debug属性设置为true。例如:
... configuration ...
使用此方法确实需要找到并加载配置文件,否则将不会读取该属性。如果需要调试查找配置文件的过程,请使用其他方法之一启用调试。
内部调试消息可通过控制台和System.Diagnostics.Trace系统获得。如果应用程序没有控制台,则其中记录的消息将丢失。请注意,应用程序可以通过设置System.Console.Out来重定向控制台流。 Trace系统默认将消息发送到附加的调试器(消息将出现在输出窗口中)。如果进程没有附加调试器,则将消息发送到系统调试器。可以使用来自http://www.sysinternals.com的DebugView之类的实用程序来捕获这些消息。
答案 2 :(得分:0)
我有同样的问题。
对于我的修复,我不得不删除
{{1}}
来自我的 assemblyInfo.cs ,如果您在代码中调用 log4net.Config.XmlConfigurator.ConfigureAndWatch()。
答案 3 :(得分:0)
即使我也遇到了同样的问题,当我进行搜索时,终于遇到了一个引起问题的问题。
****第一:**** 在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应该为真
[程序集:log4net.Config.XmlConfigurator(ConfigFile =“ app.config”,Watch = true)]
****最后:**** 您需要在BaseClass或Class中提及要登录的位置:XmlConfigurator.Configure();。
***希望它会起作用。