简单使⽤Log4net的⽅法(多个⽇志配置⽂件)
前⾔:
⼏乎所有的⼤型应⽤都会有⾃⼰的⽤于跟踪调试的API。因为⼀旦程序被部署以后,就不太可能再利⽤专门的调试⼯具了。然⽽⼀个管理员可能需要有⼀套强⼤的⽇志系统来诊断和修复配置上的问题。所以这个时候就需要⼀个记录⽇志的⼯具。log4net是.Net下⼀个⾮常优秀的开源⽇志记录组件。log4net记录⽇志的功能⾮常强⼤。它可以将⽇志分不同的等级,以不同的格式,输出到不同的媒介。
那先来介绍⼀下:
开发⼯具vs2017
【注意项⽬名称不要为log4net,否者在之后配置log4net出错】
1】NuGet中引⽤Log4net包
2】添加web配置⽂件命名为fig并在中写⼊以下代码
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-1.2" />
</configSections>
<!--配置log4net-->
<log4net>
<root>
</root>
<logger name="RollingLogFileAppender">
<level value="ALL" />
<appender-ref ref="RollingFileDebug" />
<appender-ref ref="RollingFileInfo" />
<appender-ref ref="RollingFileWarn" />
<appender-ref ref="RollingFileError" />
<appender-ref ref="RollingFileFatal" />
</logger>
<appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender">
<!--⽂件路径如果不设置(去掉 value="Log/Debug/")会默认保存到[App_Data]⽂件夹中-->
<param name="File" value="Log/Debug/"/>
<!--追加到⽂件-->
<param name="AppendToFile" value="true"/>
<!--最多保留的⽂件数,设为"-1"则不限-->
<param name="MaxSizeRollBackups" value="10"/>
<!--写到⼀个⽂件-->
<param name="StaticLogFileName" value="false"/>
<!--⽂件名,按⽇期命名-->
<param name="DatePattern" value="yyyyMMdd".log""/>
<!--创建⽇志⽂件的⽅式,可选值:Date[⽇期],⽂件⼤⼩[Size],混合[Composite]-->
<param name="RollingStyle" value="Date"/>
<!--⽇志格式-->
<layout type="log4net.Layout.PatternLayout">
<!--%newline输出的⽇志会换⾏ [%date{HH:mm:ss fff}]表⽰记录的时间 -->
<conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
<!--如果想⾃⼰设置格式就只需要-->
<!--<conversionPattern value="%message"/>-->
</layout>
<lockingmodel type="log4net.appender.fileappender+minimallock" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Debug" />
<param name="LevelMax" value="Debug" />
</filter>
</appender>
<appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/Info/"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value="10"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyyMMdd".log""/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
</layout>
<lockingmodel type="log4net.appender.fileappender+minimallock" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>
<appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/Warn/"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value="10"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyyMMdd".log""/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
</layout>
<lockingmodel type="log4net.appender.fileappender+minimallock" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<appender name="RollingFileError" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/Error/"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value="10"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyyMMdd".log""/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
</layout>
<lockingmodel type="log4net.appender.fileappender+minimallock" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/Fatal/"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value="10"/>
param name<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyyMMdd".log""/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" />
</layout>
<lockingmodel type="log4net.appender.fileappender+minimallock" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="FATAL" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
</log4net>
</configuration>
[3】在Global.asax中添加代码
//配置log4
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/fig")));
4】写⼀个LogHelper.cs但是注意在这个.cs⽂件的命名空间写上[assembly: log4net.Config.XmlConfigurator(ConfigFile = "fig", Watch = true)]注意ConfigFile 后⾯跟的是配置⽂件的相对路径
LogHelper代码
public class LogHelper
{
public static readonly ILog Log = LogManager.GetLogger("RollingLogFileAppender");
// log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从⾼到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。
//ALL 最低等级的,⽤于打开所有⽇志记录。
//DEBUG 指出细粒度信息事件对调试应⽤程序是⾮常有帮助的,主要⽤于开发过程中打印⼀些运⾏信息。
/
/INFO 消息在粗粒度级别上突出强调应⽤程序的运⾏过程。打印⼀些你感兴趣的或者重要的信息,这个可以⽤于⽣产环境中输出程序运⾏的⼀些重要信息,
//WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的⼀些提⽰。
//ERROR 指出虽然发⽣错误事件,但仍然不影响系统的继续运⾏。打印错误和异常信息,如果不想输出太多的⽇志,可以使⽤这个级别。
//FATAL 指出每个严重的错误事件将会导致应⽤程序的退出。这个级别⽐较⾼了。重⼤错误,这种级别你可以直接停⽌程序了。
//TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的⽇志级别,⼀般不会使⽤。
//OFF 最⾼等级的,⽤于关闭所有⽇志记录。
//如果将log level设置在某⼀个级别上,那么⽐此级别优先级⾼的log都能打印出来。例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,⽽INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。Log4j建议只使⽤四个 #region DEBUG 指出细粒度信息事件对调试应⽤程序是⾮常有帮助的,主要⽤于开发过程中打印⼀些运⾏信息。
public static void debug(string write)
{
Log.Debug("⽇志记录:" + write);
}
public static void debug(string write, Exception ex)
{
Log.Debug("⽇志记录:" + write + "。错误记载:" + ex.ToString());
}
#endregion
#region INFO 消息在粗粒度级别上突出强调应⽤程序的运⾏过程。打印⼀些你感兴趣的或者重要的信息,这个可以⽤于⽣产环境中输出程序运⾏的⼀些重要信息,
/// <summary>
/// 1
/// </summary>
/// <param name="write"></param>
public static void Info(string write)
{
Log.Info("⽇志记录:" + write);
}
public static void Info(string write, Exception ex)
{
Log.Info("⽇志记录:" + write + "。错误记载:" + ex.ToString());
}
#endregion
#region WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的⼀些提⽰。,可以使⽤这个级别。
public static void warn(string write)
{
Log.Warn("⽇志记录:" + write);
}
public static void warn(string write, Exception ex)
{
Log.Warn("⽇志记录:" + write + "。错误记载:" + ex.ToString());
}
#endregion
#region ERROR 指出虽然发⽣错误事件,但仍然不影响系统的继续运⾏。打印错误和异常信息,如果不想输出太多的⽇志,可以使⽤这个级别。
public static void error(string write)
{
Log.Error("⽇志记录:" + write);
}
public static void error(string write, Exception ex)
{
Log.Error("⽇志记录:" + write + "。错误记载:" + ex.ToString());
}
#endregion
#region FATAL 指出每个严重的错误事件将会导致应⽤程序的退出。这个级别⽐较⾼了。重⼤错误,这种级别你可以直接停⽌程序了。
public static void fatal(string write)
{
Log.Fatal("⽇志记录:" + write);
}
public static void fatal(string write, Exception ex)
{
Log.Fatal("⽇志记录:" + write + "。错误记载:" + ex.ToString());
}
//#endregion
#endregion
//定义输出的⽇志内容
public static string logMessage(SysLogMsg logMessage)
{
StringBuilder strInfo = new StringBuilder();
strInfo.Append("\r\n1. 错误: >> 操作时间: " + logMessage.OperationTime + " 操作⼈: " + logMessage.UserName + " \r\n");
strInfo.Append("2. 类名: " + logMessage.Class + " \r\n");
strInfo.Append("3. 内容: " + logMessage.Content + "\r\n");
strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n");
return strInfo.ToString();
}
}
5】最后可以开始写⽇志
可以⾃⼰定义⼀种⽇志格式【⾃⼰写⼀个model,定义⼏个参数时间、操作⼈、类名等等】
最后根据fig设置的路径到⽇志所在【未定义的话⼀般在项⽬的bin/Debug 或者 bin/Release⽬录下】第⼀个是默认格式⽇志,第⼆个是⾃⼰定的格式⽇志【都是string类型,只不过第⼆个使⽤\t\n换⾏,稍微美化⼀下输出格式】
<param name="File" value="Log/Debug/"/> 表⽰在当前⽂件夹Log/Debug中
总结:
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论