博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net日志的用法
阅读量:6875 次
发布时间:2019-06-26

本文共 4385 字,大约阅读时间需要 14 分钟。

public class Logs

{
private static Logger logger = LogManager.GetCurrentClassLogger(); //初始化日志类

/// <summary>

/// 日志状态枚举
/// </summary>
private enum LogState
{
/// <summary>
/// 用户已登录
/// </summary>
NLogin,
/// <summary>
/// 用户未登录
/// </summary>
YLogin,
}

/// <summary>

/// 静态构造函数
/// </summary>
static Logs()
{
//初始化配置日志
LogManager.Configuration = new XmlLoggingConfiguration(System.AppDomain.CurrentDomain.BaseDirectory.ToString() + "\\Demo\\NLog.config");
}

/// <summary>

/// 日志写入通用方法(建议使用)
/// </summary>
/// <param name="msg">日志内容</param>
/// <param name="logType"> 日志类别
/// 类别: 1.Debug
/// 2.Info
/// 3.Error
/// 4.Fatal
/// 5.Warn
/// </param>
/// <param name="loginState">登录状态 true:有用户登录信息 false 无用户登录信息</param>
/// <remarks>
/// 注:默认类型为Info 可以配置其他日志 logType用于反射 规则一定要准确
/// 例: 1.默认日志 LogWriter("test log"); 正常的业务日志
/// 2.异常日志 LogWriter("test log","Fatal"); try catch 里请使用这个日志级别
///
/// </remarks>
public static void LogWriter(String msg, String logType = "Info", bool loginState = true)
{
try
{
String logMethod = ""; //调用者类名和方法名
if (logType == "Fatal")
{
StackTrace trace = new StackTrace();
//获取是哪个类来调用的
String invokerType = trace.GetFrame(1).GetMethod().DeclaringType.Name;
//获取是类中的那个方法调用的
String invokerMethod = trace.GetFrame(1).GetMethod().Name;
logMethod = invokerType + "." + invokerMethod + " | ";
}

String IP = HttpContext.Current.Request.UserHostAddress; //获取IP

//反射执行日志方法
Type type = typeof(Logger);
MethodInfo method = type.GetMethod(logType, new Type[] { typeof(String) });
if (loginState == true)
{
//如果是登陆状态 可以记录用户的登陆信息 比如用户名,Id等
method.Invoke(logger, new object[] { logMethod + msg + " [ " + IP + " | " + LogState.NLogin + " ]" });
}
else
{
method.Invoke(logger, new object[] { logMethod + msg + " [ " + IP + " | " + LogState.NLogin + " ]" });
}
}
catch
{
//日志代码错误,直接记录日志
Fatal(msg);
Warn(msg);
}
}

/// <summary>

/// 调试日志
/// </summary>
/// <param name="msg">日志内容</param>
private static void Debug(String msg)
{
logger.Debug(msg);
}

/// <summary>

/// 信息日志
/// </summary>
/// <param name="msg">日志内容</param>
/// <remarks>
/// 适用大部分场景
/// 1.记录日志文件
/// </remarks>
private static void Info(String msg)
{
logger.Info(msg);
}

/// <summary>

/// 错误日志
/// </summary>
/// <param name="msg">日志内容</param>
/// <remarks>
/// 适用异常,错误日志记录
/// 1.记录日志文件
/// </remarks>
private static void Error(String msg)
{
logger.Error(msg);
}

/// <summary>

/// 严重致命错误日志
/// </summary>
/// <param name="msg">日志内容</param>
/// <remarks>
/// 1.记录日志文件
/// 2.控制台输出
/// </remarks>
private static void Fatal(String msg)
{
logger.Fatal(msg);
}

/// <summary>

/// 警告日志
/// </summary>
/// <param name="msg">日志内容</param>
/// <remarks>
/// 1.记录日志文件
/// 2.发送日志邮件
/// </remarks>
private static void Warn(String msg)
{
try
{
logger.Warn(msg);
}
catch { }
}
}

web项目下面添加一个Demo文件夹创建Nlog.Config

<?xml version="1.0" encoding="utf-8" ?>

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true">

<targets xsi:type="AsyncWrapper">

<!--保存至文件-->
<target name="log_file" xsi:type="File"
fileName="${basedir}/Logs/${shortdate}/${level:uppercase=false:padding=-5}.txt"
layout="${longdate} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" />
<!--输出至Debugger-->
<target name="debugger" xsi:type="Debugger"
layout="NLog: ${date:format=HH\:mm\:ss} | ${message}" />
<!--输出至控制台-->
<target name="console" xsi:type="ColoredConsole" layout="${longdate} ${message} ${exception:format=tostring}"></target>
<!--输出至邮件-->
<target xsi:type="Mail" name="infoMail"
smtpServer="smtp.163.com"
smtpPort="25"
smtpAuthentication="Basic"
smtpUserName="deno@163.com"
smtpPassword="demo"
enableSsl="true"
addNewLines="true"
from="demo@163.com"
to="demo@qq.com"
subject="Project Exception Mail"
header="*********************"
body="${longdate} | ${message} "
footer="*********************"/>
</targets>

<rules>
<logger name="*" level="Info" writeTo="log_file" />
<logger name="*" levels="Error" writeTo="log_file" />
<logger name="*" levels="Debug" writeTo="log_file" />
<!--<logger name="*" level="Debug" writeTo="debugger" />-->
<!--<logger name="*" level="Fatal" writeTo="console" />-->
<logger name="*" level="Fatal" writeTo="log_file" />
<!--<logger name="*" level="Warn" writeTo="infoMail" />-->
<logger name="*" level="Warn" writeTo="log_file" />
</rules>
</nlog>

转载于:https://www.cnblogs.com/zwyAndDong/p/9076842.html

你可能感兴趣的文章
怎么改变Win7登陆背景图片
查看>>
虚拟带库和物理带库比较
查看>>
AD委派加域权限
查看>>
在Delphi 7中使用加密的SQLite
查看>>
wordpress 无用的RSS Feed Cache
查看>>
Linux Vi编辑器的基本使用方法
查看>>
HTTP头域列表与解释 之 response篇
查看>>
一切属他,则名为苦;一切由己,自在安乐。
查看>>
velocity 之坑:不同枚举类(enum)有相同的静态(static)方法,无法访问第二个枚举类...
查看>>
图的遍历方法(深度优先和广度优先算法)
查看>>
鸟巢-一种全新的Native APP开发模式,这篇文章为您解读
查看>>
shell批量查询IP
查看>>
快速生成移动设备应用图标的在线工具 - makeappicon
查看>>
学习linux决心书
查看>>
SVN服务的搭建
查看>>
ISO 9126质量模型:软件质量模型的6大特性和27个子特性
查看>>
一个 rm -rf的教训
查看>>
几何画板添加背景图片方法
查看>>
用main函数传参做简单的计算器的代码
查看>>
Bash终端命令行,使用privoxy将socks代理转成http代理
查看>>