第一步添加引用
搜索log4net点击安装
第二步添加一个log4net的类
public static class Log4net
{
static ILog _log = null;
#region Log
/// <summary>
/// 生成日志文件
/// </summary>
/// <param name="msg">生成日志文件的消息</param>
/// <param name="logger">生成日志配置文件指向路径</param>
/// <param name="head">消息追加</param>
/// <param name="ex"></param>
/// <returns></returns>
public static void log(this string msg, string logger, string head = "", Exception ex = null)
{
if (head != "")
{
head += msg;
}
else
{
head = msg;
}
if (ex == null)
{
LogManager.GetLogger(logger).Error(head);//生成日志
}
else
{
LogManager.GetLogger(logger).Error(head, ex);
}
//自动清除日志这里设置为7天后自动删除
deletelog(logger);
}
public static string log(this Exception msg, string logger, string head = "")
{
if (head != "")
{
LogManager.GetLogger(logger).Error(head, msg);
}
else
{
LogManager.GetLogger(logger).Error(msg);
}
return head;
}
#endregion
/// <summary>
/// 删除日志
/// </summary>
/// <param name="logger"></param>
public static void deletelog(string logger)
{
_log = LogManager.GetLogger(logger);
Task.Run(() => {
var apps = _log.Logger.Repository.GetAppenders();
if (apps.Length <= 0)
{
return;
}
var now = DateTime.UtcNow.AddDays(-7);//7天
foreach (var item in apps)
{
if (item is RollingFileAppender)
{
RollingFileAppender roll = item as RollingFileAppender;
var dir = Path.GetDirectoryName(roll.File);
var files = Directory.GetFiles(dir, "*.log");
foreach (var filePath in files)
{
var file = new FileInfo(filePath);
if (file.CreationTimeUtc < now)
{
try
{
file.Delete();
}
catch (Exception)
{
}
}
}
}
}
});
}
}
}
public class RefObject
{
public static bool operator false(RefObject val) => null == val;
public static bool operator true(RefObject val) => null != val;
public static bool operator !(RefObject val) => null == val;
}
public class StackPatternLayout : PatternLayout
{
public StackPatternLayout()
{
this.AddConverter("stack", typeof(StackTraceConverter));
}
}
public class StackTraceConverter : PatternLayoutConverter
{
protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
{
int len = 0;
var stack = new StackTrace(true);
var frames = stack.GetFrames();
Queue<string> sb = new Queue<string>();
for (int i = 0; i < frames.Length; i++)
{
var frame = frames[i];
if (frame.GetMethod().DeclaringType.Assembly != typeof(LogManager).Assembly)
{
var cls = frame.GetMethod().DeclaringType.FullName;
var m = frame.GetMethod().Name;
var line = frame.GetFileLineNumber();
if (line > 0)
{
sb.Enqueue($"{cls}.{m} at {line}");
}
else if (len < 2)
{
sb.Enqueue($"{cls}.{m} at {line}");
++len;
}
}
}
len = 0;
while (sb.Count > 0)
{
var log = sb.Dequeue();
if (len > 0)
{
writer.WriteLine(log);
}
else
{
++len;
}
}
}
第三步
添加配置文件,添加一个XML文件即可
<log4net>
<logger name="global">
<level value="ERROR" />
<appender-ref ref="GlobalAppender" />
</logger>
<appender name="GlobalAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="logs/global/" />
<param name="MaxSizeRollBackups" value="-1" />
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<param name="MaximumFileSize" value="10MB" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value='"global_"yyyy-MM-dd".log"' />
<param name="StaticLogFileName" value="false" />
<param name="AppendToFile" value="true" />
<layout type="StackPatternLayout">
<param name="ConversionPattern" value="%n[%d][%t]%m%n%stack%n" />
</layout>
<!--< > = <> %n = 回车-->
</appender>
<logger name="print">
<level value="ERROR" />
<appender-ref ref="PrintAppender" />
</logger>
<appender name="PrintAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="logs/print/" />
<param name="MaxSizeRollBackups" value="-1" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<param name="MaximumFileSize" value="10MB" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value='"print_"yyyy-MM-dd".log"' />
<param name="StaticLogFileName" value="false" />
<param name="AppendToFile" value="true" />
<layout type="StackPatternLayout">
<param name="ConversionPattern" value="%n[%d][%t]%m%n%stack%n" />
</layout>
<!--< > = <> %n = 回车-->
</log4net>
到这里基本没问题啦!没有引用的地方添加引用即可
第4步
在你需要生产log的地方调用Log4net这个类即可生成日志
try
{
var response = await visitor.Client.GetStringAsync(url);
var success = JsonConvert.DeserializeObject<WebApiSuccess>(response);
if (success)
{
var ret = JsonConvert.DeserializeObject<WebApiResult<T>>(response);
return ret.result;
}
//这里调用,
$"请求{url}时错误,{success}\n{response}".log(webapi);
}
catch (Exception e)
{
//这里调用,
$"请求{url}时错误,{e.Message}".log(webapi,ex: e);
}
静态类的静态方法可直接调用
在这里插入代码片
效果
拿走不谢!
配置文件不清楚的地方多百度,可以根据自己的需要进行修改,以适应项目需求。