5.
一.创建 EntityFrameWork版本的 类库项目.
二.右键项目中的引用 -------> 管理Nuget程序包 -------> 搜索 Log4Net 并进行安装.
三.右键项目 -------> 添加 -------> 新建项,选择常规 -------> 应用程序配置文件并给它将名称修改为 log4net.config
四. 配置 log4net.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- 为log4net节注册一个节处理程序 -->
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>
<!-- 本节包含log4net配置设置 -->
<log4net>
<!-- name属性指定其名称, type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
<appender name="TMSLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\TechnicalSummary_Logs\Logs\%date{yyyy-MM}\AllLogs\ALL_%date{yyyy-MM-dd}.log" />
<appendToFile value="true" />
<datePattern value="yyyy-MM-dd" />
<rollingStyle value="Date" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="TMSCommonLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\TechnicalSummary_Logs\Logs\%date{yyyy-MM}\InterFace\InterFace_%date{yyyy-MM-dd}.log" />
<appendToFile value="true" />
<datePattern value="yyyy-MM-dd" />
<rollingStyle value="Date" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="TMSBizProcessorFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\TechnicalSummary_Logs\Logs\%date{yyyy-MM}\Adapter\Adapter_%date{yyyy-MM-dd}.log" />
<appendToFile value="true" />
<datePattern value="yyyy-MM-dd" />
<rollingStyle value="Date" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="TMSDALLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\TechnicalSummary_Logs\Logs\%date{yyyy-MM}\DAL\DAL_%date{yyyy-MM-dd}.log" />
<appendToFile value="true" />
<datePattern value="yyyy-MM-dd" />
<rollingStyle value="Date" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="TMSBLLLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\TechnicalSummary_Logs\Logs\%date{yyyy-MM}\BLL\BLL_%date{yyyy-MM-dd}.log" />
<appendToFile value="true" />
<datePattern value="yyyy-MM-dd" />
<rollingStyle value="Date" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="TMSQuartzServerLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\TechnicalSummary_Logs\Logs\%date{yyyy-MM}\TaskService\TaskService_%date{yyyy-MM-dd}.log" />
<appendToFile value="true" />
<datePattern value="yyyy-MM-dd" />
<rollingStyle value="Date" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="TMSWebAPILogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\TechnicalSummary_Logs\Logs\%date{yyyy-MM}\ServicesLogs\Services_%date{yyyy-MM-dd}.log" />
<appendToFile value="true" />
<datePattern value="yyyy-MM-dd" />
<rollingStyle value="Date" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root>
<!--level 级别:ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF -->
<!--<logger name="Common">-->
<level value="ALL"/>
<!--日志类名称 不加 logger 标签时,所以日志类记录的日志都会记录到 TMSLogFileAppender 这个介质中-->
<appender-ref ref="TMSLogFileAppender" />
<!--</logger>-->
</root>
<logger name="Common"> <!--日志类的名字-->
<level value="ALL"/><!--定义记录的日志级别-->
<appender-ref ref="TMSCommonLogFileAppender" /><!--记录到哪个介质中去-->
</logger>
<logger name="BizProcessor">
<level value="ALL"/>
<appender-ref ref="TMSBizProcessorFileAppender" />
</logger>
<logger name="QuartzServer">
<level value="ALL"/>
<appender-ref ref="TMSQuartzServerLogFileAppender" />
</logger>
<logger name="DAL">
<level value="ALL"/>
<appender-ref ref="TMSDALLogFileAppender" />
</logger>
<logger name="BLL">
<level value="ALL"/>
<appender-ref ref="TMSBLLLogFileAppender" />
</logger>
<logger name="WebAPI">
<level value="ALL"/>
<appender-ref ref="TMSWebAPILogFileAppender" />
</logger>
</log4net>
</configuration>
五. 配置 LogLevelType 日志所需常量区域类.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TechnicalSummary.LogUtility
{
/// <summary>
/// 日志级别
/// </summary>
public enum LogLevelType
{
/// <summary>
/// 调试信息
/// </summary>
DEBUG = 1,
/// <summary>
/// 正常信息
/// </summary>
INFO = 2,
/// <summary>
/// 警告信息
/// </summary>
WARN = 3,
/// <summary>
/// 错误信息
/// </summary>
ERROR = 4,
/// <summary>
/// 严重错误
/// </summary>
FATAL = 5
}
///<summary>
/// 日志区域
/// </summary>
public class LogArea
{
/// <summary>
/// 对接服务区域
/// </summary>
public const string Common = "Common";
/// <summary>
/// 对接服务区域
/// </summary>
public const string BizProcessor = "BizProcessor";
/// <summary>
/// 数据访问层
/// </summary>
public const string DAL = "DAL";
/// <summary>
/// 后台逻辑处理区域
/// </summary>
public const string BLL = "BLL";
/// <summary>
/// 定时任务区域
/// </summary>
public const string QuartzServer = "QuartzServer";
/// <summary>
/// 接口区域
/// </summary>
public const string WebAPI = "WebAPI";
/// <summary>
/// 接口区域
/// </summary>
public const string SIAdapter = "SIAdapter";
/// <summary>
///
/// </summary>
public const string SIInterface = "SIInterface";
/// <summary>
///
/// </summary>
public const string SIService = "SIService";
}
}
六. 配置 LogHelper 帮助类
using log4net;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TechnicalSummary.LogUtility
{
public class LogHelper
{
private const string m_ConfigName = "log4net.config";
// 从启动程序的配置文件中读取 LogPath 的 log4net.config文件在电脑上的路径.
private static readonly string m_GetConfigFilePath = ConfigurationManager.AppSettings["LogPath"] + "";
static LogHelper()
{
if (!string.IsNullOrEmpty(m_GetConfigFilePath))
{
string path;
if (!m_GetConfigFilePath.EndsWith(m_ConfigName))
{
path = Path.Combine(m_GetConfigFilePath, m_ConfigName);
}
else
{
path = m_GetConfigFilePath;
}
InitConfig(path);
}
else
{
InitConfig();
}
}
/// <summary>
/// 根据应用程序的配置自动配置log4net系统
/// </summary>
public static void InitConfig()
{
log4net.Config.XmlConfigurator.Configure();
}
/// <summary>
/// 初始化配置信息
/// </summary>
/// <param name="configFile">log4net.config路径</param>
public static void InitConfig(string configFile)
{
if (System.IO.File.Exists(configFile))
{
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(configFile));
}
}
/// <summary>
/// 记录日志 —— 没有抛出异常的情况下使用
/// </summary>
/// <param name="logLevel"></param>
/// <param name="message"></param>
public static void WriteLog(LogLevelType logLevel, object message)
{
log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
DoWriteLog(log, logLevel, message);
}
/// <summary>
/// 记录日志 —— 可能抛出异常的情况下使用例如 Try - catch
/// </summary>
/// <param name="logLevel"></param>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void WriteLog(LogLevelType logLevel, object message, Exception exception)
{
log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
DoWriteLog(log, logLevel, message, exception);
}
/// <summary>
/// 记录日志 —— 需要输出哪块区域时使用并且可能抛出异常的情况下使用例如 Try - catch
/// </summary>
/// <param name="logAreaName"></param>
/// <param name="logLevel"></param>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void WriteLog(string logAreaName, LogLevelType logLevel, object message, Exception exception)
{
log4net.ILog log = log4net.LogManager.GetLogger(logAreaName);
DoWriteLog(log, logLevel, message, exception);
}
/// <summary>
/// 记录日志 —— 需要输出哪块区域时使用
/// </summary>
/// <param name="logAreaName"></param>
/// <param name="logLevel"></param>
/// <param name="message"></param>
public static void WriteLog(string logAreaName, LogLevelType logLevel, object message)
{
log4net.ILog log = log4net.LogManager.GetLogger(logAreaName);
DoWriteLog(log, logLevel, message);
}
public static log4net.ILog GetLogger(string logName)
{
log4net.ILog log = log4net.LogManager.GetLogger(logName);
return log;
}
private static void DoWriteLog(ILog log, LogLevelType logLevel, object message)
{
switch (logLevel)
{
case LogLevelType.DEBUG:
if (log.IsDebugEnabled)
{
log.Debug(message);
}
break;
case LogLevelType.INFO:
if (log.IsInfoEnabled)
{
log.Info(message);
}
break;
case LogLevelType.WARN:
if (log.IsWarnEnabled)
{
log.Warn(message);
}
break;
case LogLevelType.ERROR:
if (log.IsErrorEnabled)
{
log.Error(message);
}
break;
case LogLevelType.FATAL:
if (log.IsFatalEnabled)
{
log.Fatal(message);
}
break;
default:
break;
}
}
private static void DoWriteLog(ILog log, LogLevelType logLevel, object message, Exception exception)
{
switch (logLevel)
{
case LogLevelType.DEBUG:
if (log.IsDebugEnabled)
{
log.Debug(message, exception);
}
break;
case LogLevelType.INFO:
if (log.IsInfoEnabled)
{
log.Info(message, exception);
}
break;
case LogLevelType.WARN:
if (log.IsWarnEnabled)
{
log.Warn(message, exception);
}
break;
case LogLevelType.ERROR:
if (log.IsErrorEnabled)
{
log.Error(message, exception);
}
break;
case LogLevelType.FATAL:
if (log.IsFatalEnabled)
{
log.Fatal(message, exception);
}
break;
default:
break;
}
}
}
}
七.在 Winfrom应用程序项目 或 控制台程序项目的 App.config 文件中加入
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<appSettings>
<!-- log4net.config文件存放路径 -->
<add key="LogPath" value="D:\TechnicalSummary\TechnicalSummary.LogUtility\log4net.config" />
</appSettings>
</configuration>
八.在 Winfrom应用程序项目 或 控制台程序项目的 AssemblyInfo 文件中加入
// log4net从配置文件中读取配置
[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "log4net.config", Watch = true)]
九.在 控制台程序 Main 方法中调用记录日志的方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TechnicalSummary.Test
{
public class Program
{
public static void Main(string[] args)
{
// 此方法可以重载,详细阅读代码
LogUtility.LogHelper.WriteLog(LogUtility.LogLevelType.INFO, "日志信息123456789");
Console.ReadKey();
}
}
}
生成的结果
文件夹里有日志文件 .log 抓紧试试吧.