前言:
几乎所有的大型应用都会有自己的用于跟踪调试的 API. 因为一旦程序被部署以后, 就不太可能再利用专门的调试工具了. 然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题. 所以这个时候就需要一个记录日志的工具. log4net 是. Net 下一个非常优秀的开源日志记录组件. log4net 记录日志的功能非常强大. 它可以将日志分不同的等级, 以不同的格式, 输出到不同的媒介.
那先来介绍一下:
开发工具 vs2017
[注意项目名称不要为 log4net, 否者在之后配置 log4net 出错]
1] NuGet 中引用 Log4net 包
2] 添加 web 配置文件命名为 log4new.config 并在中写入以下代码
- <?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="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("~/Web.config")));
4] 写一个 LogHelper.cs 但是注意在这个. cs 文件的命名空间写上[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", 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 建议只使用四个级别, 优先级从高到低分别是 ERROR,WARN,INFO,DEBUG.
- #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, 定义几个参数 时间, 操作人, 类名等等]
最后根据 log4new.config 设置的路径找到日志所在[未定义的话一般在项目的 bin/Debug 或者 bin/Release 目录下] 第一个是默认格式日志, 第二个是自己定的格式日志[都是 string 类型, 只不过第二个使用 \ t\n 换行, 稍微美化一下输出格式]
<param name="File" value="Log/Debug/"/>表示在当前文件夹 Log/Debug 中
最后附上 githup 地址 https://github.com/E1439107348/log4netDemo
总结:
来源: https://www.jb51.net/article/150481.htm