有一个LoggerManager模块,引用了log4net,
其中如下操作: public static class Logger
{
private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public static void Debug(object message)
{
if (logger.IsDebugEnabled)
{
logger.Debug(message);
}
}
结果是IsDebugEnabled =false!即使强制写也看不到输出日志。下面是配置文件。<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections> <log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:\test.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="2KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<footer value="[Footer]--Test By cxy1981 " />
<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender> <root>
<priority value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>首先说明:这个配置文件绝对可用。而且能正常输出文件。
结果是打死都没有输出日志!!有人说是因为没有放在主程序中!有道理吗?不可理解啊。各位帮帮忙,
其中如下操作: public static class Logger
{
private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public static void Debug(object message)
{
if (logger.IsDebugEnabled)
{
logger.Debug(message);
}
}
结果是IsDebugEnabled =false!即使强制写也看不到输出日志。下面是配置文件。<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections> <log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:\test.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="2KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<footer value="[Footer]--Test By cxy1981 " />
<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender> <root>
<priority value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>首先说明:这个配置文件绝对可用。而且能正常输出文件。
结果是打死都没有输出日志!!有人说是因为没有放在主程序中!有道理吗?不可理解啊。各位帮帮忙,
public class Logger
{ public static bool GetTracerSwitchor()
{
string configPath = Application.StartupPath + "\\eSerialPro.exe";
System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);
bool IsTracer = Convert.ToBoolean(config.AppSettings.Settings["IsTracer"].Value);
return IsTracer;
} /// <summary>
/// 调试信息
/// </summary>
/// <param name="msg"></param>
public static void Debug(string msg)
{
bool IsTracer = GetTracerSwitchor();
if (IsTracer)
{
log4net.ILog log = log4net.LogManager.GetLogger("Test");
if (log.IsDebugEnabled)
{
log.Debug(msg);
}
log = null;
}
}
}
这样调用再在Assembly里加入信息[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]再在可执行程序的根目录下,写一个名为log4net.appconfig文件,内容如下<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<!--
<level value="ALL" />
<appender-ref ref="rootFile" />
-->
</root>
<logger name="Test">
<level value="DEBUG" />
<appender-ref ref="rollingFile" />
</logger>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" value="Application.log.txt" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value=" ----------------------header-------------- " />
<param name="Footer" value=" ----------------------footer-------------- " />
</layout>
</appender>
</log4net></configuration>
就可以在程序的任意位置输出了,注意你自己程序的程序名和我给出的可能有出入,自己改下
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,
log4net-net-1.0"
/>
</configSections> <log4net>
<!--
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />RollingSocket RollingErentLog
</root>
--> <logger name="Log">
<level value="ALL"/>
<appender-ref ref="RollingLog" />
</logger>
<logger name="Error">
<level value="ALL"/>
<appender-ref ref="RollingError" />
</logger>
<logger name="Login">
<level value="ALL"/>
<appender-ref ref="RollingLogin" />
</logger> <logger name="EventLog">
<level value="ALL"/>
<appender-ref ref="RollingEventLog" />
</logger> <logger name="ResLog">
<level value="ALL"/>
<appender-ref ref="RollingResLog" />
</logger>
<appender name="RollingError" type="log4net.Appender.RollingFileAppender">
<file value="Err\Err" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd'.txt'" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t]%c %m%n" />
</layout>
</appender> <appender name="RollingLog" type="log4net.Appender.RollingFileAppender">
<file value="Log\Log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value=".yyyyMMdd'.txt'" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t]%c %m%n" />
</layout>
</appender>
<appender name="RollingLogin" type="log4net.Appender.RollingFileAppender">
<file value="Login\Login" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value=".yyyyMMdd'.txt'" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender> <appender name="RollingEventLog" type="log4net.Appender.RollingFileAppender">
<file value="Event\Event" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value=".yyyyMMdd'.txt'" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender> <appender name="RollingResLog" type="log4net.Appender.RollingFileAppender">
<file value="Res\Res" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value=".yyyyMMdd'.txt'" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d - %m%n" />
</layout>
</appender>
</log4net></configuration>
--
log4net.ILog Log = log4net.LogManager.GetLogger("Log");
log4net.ILog LogLogin = log4net.LogManager.GetLogger("Login"); LogLogin.Info("通信Connect成功!");
[assembly: log4net.Config.XmlConfigurator]如果是 webform 的
在 Application_Start 中加入 void Application_Start(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
}
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "conf\\log4net.config", Watch = true)]
这个语句放在Logger处理模块中也行,注意"conf\\log4net.config“
然后在处理Logger的类中:
private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);这里是指系统输出目录下的conf目录,我之前就是这个路径一直不对,才无法输出的。
至于配置文件,基本上随便在网上抄一段都可以用。谢谢各位。
public void Sav2File(string LOGFILE, string intext)
{
try
{
using (StreamWriter sw = new StreamWriter(LOGFILE, true))
{
DateTime nn = DateTime.Now;
sw.Write("# " + nn.ToLongDateString() + " " + nn.ToLongTimeString() + " " + nn.Millisecond() + " # " + intext + " \r\n");
}
}
catch
{
//
}
}
就这么简单 需要其他功能自己加
程序在运行时就会出错了