添加NuGet包log4net
log4net.config配置文件并设置始终复制
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,
log4net-net-1.0"/>
</configSections>
<log4net>
<appender name="AppLog" type="log4net.Appender.RollingFileAppender">
<param name="File" value="SysLog\" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="-1" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<param name="MaximumFileSize" value="10MB" />
<param name="RollingStyle" value="Size" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-5p %d [%c] %m%n" />
</layout>
</appender>
<logger name="AppLog">
<level value="all" />
<appender-ref ref="AppLog" />
</logger>
<root>
<level value="all" />
</root>
</log4net>
</configuration>
log4net类
public class AppLog
{
private static string filepath = AppDomain.CurrentDomain.BaseDirectory + @"\SysLog\";
private static readonly log4net.ILog logComm = log4net.LogManager.GetLogger("AppLog");
static AppLog()
{
log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));
if (!Directory.Exists(filepath))
{
Directory.CreateDirectory(filepath);
}
}
/// <summary>
/// 输出系统日志
/// </summary>
/// <param name="msg">信息内容</param>
/// <param name="source">信息来源</param>
private static void WriteLog(string msg, bool isWrite, Action<object> action)
{
if (isWrite)
{
string filename = "AppLog_" + DateTime.Now.ToString("yyyyMMdd_HH") + ".log";
var repository = LogManager.GetRepository();
#region MyRegion
var appenders = repository.GetAppenders();
if (appenders.Length > 0)
{
RollingFileAppender targetApder = null;
foreach (var Apder in appenders)
{
if (Apder.Name == "AppLog")
{
targetApder = Apder as RollingFileAppender;
break;
}
}
if (targetApder.Name == "AppLog")//如果是文件输出类型日志,则更改输出路径
{
if (targetApder != null)
{
if (!targetApder.File.Contains(filename))
{
targetApder.File = @"SysLog\" + filename;
targetApder.ActivateOptions();
}
}
}
}
#endregion
action(msg);
//logComm.Error(msg + "\n");
}
}
public static void WriteError(string msg, bool isWrite)
{
WriteLog(msg, isWrite, logComm.Error);
}
public static void WriteInfo(string msg, bool isWrite)
{
WriteLog(msg, isWrite, logComm.Info);
}
public static void WriteWarn(string msg, bool isWrite)
{
WriteLog(msg, isWrite, logComm.Warn);
}
}