NLog使用
NLog的配置文件,文件上面有详细的备注,注意这个配置文件一定要放在NLog.dll的文件夹里

<?xml version="1.0" encoding="utf-8" ?>
<!-- autoReload:配置文件修改后,程序是否自动加载相关配置
internalLogFile:Nlog程序内部日志的输出文件
-->
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true" internalLogFile="logs/nlog.log">
<!--
See http://nlog-project.org/wiki/Configuration_file
for information on customizing logging rules and outputs.
--> <!-- 输出格式 -->
<!-- ErrorLayout变量:错误信息的日志布局 -->
<variable name="ErrMsg" value="${time} [${level}] - ${message} ${exception:format=ToString} ${stacktrace} "/>
<!-- BasicLayout变量:基本的日志布局 -->
<variable name="BasicLayout" value="${time} [${level}] - ${message} ${onexception:inner=${ErrMsg}}"/>
<!-- ErrorNoticeLayout变量:异常通知的日志布局 -->
<variable name="ErrorNoticeLayout" value="##${threadid}##${exception}##${message}##${exception:format=StackTrace}"/> <targets>
<!-- DefaultLog目标:通用默认的输出目标,采用AsyncWrapper、RetryingWrapper,输出类型为File,
文件最大10M,最多100个文件,文件路径为fileName,按照日期命名,日志布局采用BasicLayout -->
<target name="DefaultLog" xsi:type="AsyncWrapper">
<target xsi:type="RetryingWrapper">
<target xsi:type="File" archiveAboveSize="10240000" maxArchiveFiles="100"
fileName="${basedir}/logs/${date:format=yyyyMM}/${shortdate}.log" layout="${BasicLayout}" />
</target>
</target> <!-- ErrorLog目标:通用默认的输出目标,采用AsyncWrapper、RetryingWrapper,输出类型为File,
文件最大10M,文件路径为fileName,日志布局采用ErrorLayout-->
<target name="ErrorLog" xsi:type="AsyncWrapper">
<target xsi:type="RetryingWrapper">
<target xsi:type="File" archiveAboveSize="10240000"
fileName="${basedir}/logs/${date:format=yyyyMM}/${shortdate}_Error.log" layout="${ErrMsg}" />
</target>
</target>
<!-- ErrorNoticeLog目标:通用默认的输出目标,采用AsyncWrapper,输出类型为LogReceiverService,
输出路径为endpointAddress,日志布局采用ErrorNoticeLayout-->
<target name="ErrorNoticeLog" xsi:type="AsyncWrapper">
<target xsi:type="LogReceiverService"
endpointAddress="http://localhost:7169/NLogReceiveWCFService.svc" >
<parameter layout="${ErrorNoticeLayout}" name="Layout" type="System.Type"/>
</target>
</target> </targets>
<rules>
<!-- 接收所有的Error及更高级的日志,记录到ErrorLog target -->
<logger name="*" minlevel="Error" writeTo="ErrorLog" />
<!-- 接收所有的Error及更高级的日志,记录到ErrorNoticeLog target -->
<!--<logger name="*" minlevel="Error" writeTo="ErrorNoticeLog" />-->
<!-- 接收所有的Debug及更高级的日志,记录到DefaultLog target,在新版本的LogWriter中,需要将name配置为* -->
<logger name="DefaultLog" minlevel="Debug" writeTo="DefaultLog" />
</rules>
</nlog>

客户端调用:

class Program
{
private static Logger logger = LogManager.GetLogger("DefaultLog");
static void Main(string[] args)
{
logger.Info("Info"); logger.Error("Error"); //logger.Error("测试");
}
}

关于target 类型为ErrorNoticeLog的调用服务的方式,需要写一个WCF服务,继承NLog中的ILogReceiverServer这个接口,实现ProcessLogMessages这个方法
代码如下:

public class NLogReceiveWCFService : INLogReceiveWCFService
{ public void ProcessLogMessages(NLog.LogReceiverService.NLogEvents nevents)
{
if (nevents == null || nevents.Events == null) return;
var events = nevents.ToEventInfo();
foreach (var eachEvent in events)
{
var logger = LogManager.GetLogger(eachEvent.LoggerName); //业务系统名称##${threadid}##${message}##${onexception:inner=${ErrMsg}}
logger.Log(eachEvent);
var p = new LogReportModel(); try
{
//提供方法执行的上下文环境
OperationContext context = OperationContext.Current;
//获取传进的消息属性
var properties = context.IncomingMessageProperties;
//获取消息发送的远程终结点IP和端口
var endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
p.ID = Guid.NewGuid();
p.IP = endpoint.Address;
p.LoggerName = eachEvent.LoggerName;
p.Level = eachEvent.Level.ToString();
p.Message = eachEvent.Message;
p.LogTime = DateTime.Now;
var layout = Regex.Split(eachEvent.Properties["Layout"].ToString(), "##", RegexOptions.IgnoreCase);
p.BusinessName = layout[0];
p.Thread = layout[1];
p.ErrorMessage = layout[2];
p.StackTrace = layout[3];
}
catch (Exception)
{
throw;
}
try
{
//对报错信息进行处理,存入数据库或者发送短信或者发送邮件
}
catch (Exception)
{
throw;
}
}
}
}

NLog配置文件,详细的配置,如下:

<?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" autoReload="true" internalLogFile="${basedir}/logs/nlog.log">
<!--
See http://nlog-project.org/wiki/Configuration_file
for information on customizing logging rules and outputs.
--> <!-- 输出格式 -->
<variable name="ExceptionMsg" value="${exception:format=type,message,method:maxInnerExceptionLevel=5:innerFormat=shortType,message,method}" />
<variable name="ErrMsg" value="${time} [${threadid}] [${level}] - ${message} ${ExceptionMsg}" />
<variable name="BasicLayout" value="${time} [${threadid}] [${level}] - ${message} ${onexception:inner=${ExceptionMsg}}" />
<variable name="ReportLayout" value="基础类库单元测试##${threadid}##${exception}##${message}##${onexception:inner=${ExceptionMsg}}" /> <targets> <target name="DefaultLog" xsi:type="AsyncWrapper">
<target xsi:type="RetryingWrapper">
<target xsi:type="File" archiveAboveSize="10240000" fileName="${basedir}/logs/${date:format=yyyyMM}/${shortdate}.log" layout="${BasicLayout}" />
</target>
</target>
<target name="ErrorLog" xsi:type="AsyncWrapper">
<target xsi:type="RetryingWrapper">
<target xsi:type="File" archiveAboveSize="10240000" fileName="${basedir}/logs/${date:format=yyyyMM}/${shortdate}_Error.log" layout="${ErrMsg}" />
</target>
</target> <target name="ErrorReport" xsi:type="AsyncWrapper">
<target xsi:type="LogReceiverService" endpointAddress="http://192.168.111.204:9440/NLogReceiveWCFService.svc" clientId="Layout">
<parameter layout="${ReportLayout}" name="Layout" type="System.Type" />
</target>
</target>
</targets>
<rules>
<logger name="*" minlevel="Error" writeTo="ErrorLog" />
<!--<logger name="*" minlevel="Error" writeTo="ErrorReport" />-->
<logger name="*" minlevel="Trace" writeTo="DefaultLog" />
</rules>
</nlog>

NLog使用的更多相关文章
- Nlog配置实例
彩色Console target <?xml version="1.0" encoding="utf-8" ?> <nlog xmlns= ...
- NLog在Asp.Net MVC的实战应用
Asp.Net MVC FilterAttribute特性.读取xml反序列化.NLog实战系列文章 首先新建一个MVC project. 一.NLog的配置. 作者:Jarosław Kowalsk ...
- [转]C# 使用Nlog记录日志到数据库
本文转自:http://www.cnblogs.com/weixing/archive/2013/04/26/3044422.html 摘要]Nlog是一个很不错的.NET日志记录组件,它可以将日志输 ...
- [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件
本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ...
- Logging with NLog
相比较log4net, 我更喜欢NLog, 因为NLog 更简单, 而且配置选项也更加的清楚,可能是因为log4net 是从log4j 移植过来的一个原因吧,总感觉有很多的java 成分在. 要使用N ...
- C#开源日志Nlog入门
c#语言使用的日志比较多,比如:Log4.NLog等,今天我就简单随笔记录哈NLog的使用. 1.NLog的安装: 直接在VS编译器中打开程序包管理器,输入Install-Package NLogin ...
- Web APi之异常处理(Exception)以及日志记录(NLog)(十六)
前言 上一篇文章我们介绍了关于日志记录用的是Log4net,确实也很挺强大,但是别忘了我们.NET有专属于我们的日志框架,那就是NLog,相对于Log4net而言,NLog可以说也是一个很好的记录日志 ...
- .NET中使用NLog记录日志
以前小编记录日志使用的是Log4Net,虽然好用但和NLog比起来稍显复杂.下面小编就和大伙分享一下NLog的使用方式. 引用NLog.Config 在使用NLog之前,我们要首先添加对NLog.Co ...
- 从零开始,搭建博客系统MVC5+EF6搭建框架(3),添加Nlog日志、缓存机制(MemoryCache、RedisCache)、创建控制器父类BaseController
一.回顾系统进度以及本章概要 目前博客系统已经数据库创建.以及依赖注入Autofac集成,接下来就是日志和缓存集成,这里日志用的是Nlog,其实还有其他的日志框架如log4,这些博客园都有很多介绍,这 ...
- ElasticSearch+NLog+Elmah实现Asp.Net分布式日志管理
本文将介绍使用NLOG.Elmah结合ElasticSearch实现分布式日志管理. 一.ElasticSearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布 ...
随机推荐
- luogu P4688 [Ynoi2016]掉进兔子洞 bitset 莫队
题目链接 luogu P4688 [Ynoi2016]掉进兔子洞 题解 莫队维护bitset区间交个数 代码 // luogu-judger-enable-o2 #include<cmath&g ...
- System.currentTimeMillis() uptimeMillis elapsedRealtime 区别
System.currentTimeMillis() 系统时间,也就是日期时间,可以被系统设置修改,然后值就会发生跳变. uptimeMillis 自开机后,经过的时间,不包括深度睡眠的时间 ela ...
- 自己对war包解压的误区
ss.war解压后不会出现ss而是startup.sh运行后会出现
- java学习手册
http://www.runoob.com/java/java-environment-setup.html
- unity3d 摄像机抖动效果 CameraShake
unity3d 摄像机抖动效果 ,利用脚本直接控制:当然也可以选择使用dotween插件,但到不至于为了使用仅一个功能,就导入了一个插件: 脚本示例: using UnityEngine; using ...
- Mars的简单使用
- 虚拟机搭建和安装Hadoop及启动
马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...
- 机器学习笔记(4):多类逻辑回归-使用gluton
接上一篇机器学习笔记(3):多类逻辑回归继续,这次改用gluton来实现关键处理,原文见这里 ,代码如下: import matplotlib.pyplot as plt import mxnet a ...
- Knockout.Js官网学习(加载或保存JSON数据)
前言 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地存储需要序列化数据),交换数据最方便的就是使用JSON格式 – 大多数的Ajax应用程 ...
- 关于产品UE的胡思乱想
1.产品的目标是 取悦 用户 不能只盯着功能实现,而不考虑用户使用. 我们的目标不应该不过让用户使用我们的产品.而是让用户在使用我们产品过程中感到 "愉悦". 2.用户是SB 3 ...