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使用的更多相关文章

  1. Nlog配置实例

      彩色Console target <?xml version="1.0" encoding="utf-8" ?> <nlog xmlns= ...

  2. NLog在Asp.Net MVC的实战应用

    Asp.Net MVC FilterAttribute特性.读取xml反序列化.NLog实战系列文章 首先新建一个MVC project. 一.NLog的配置. 作者:Jarosław Kowalsk ...

  3. [转]C# 使用Nlog记录日志到数据库

    本文转自:http://www.cnblogs.com/weixing/archive/2013/04/26/3044422.html 摘要]Nlog是一个很不错的.NET日志记录组件,它可以将日志输 ...

  4. [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件

    本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ...

  5. Logging with NLog

    相比较log4net, 我更喜欢NLog, 因为NLog 更简单, 而且配置选项也更加的清楚,可能是因为log4net 是从log4j 移植过来的一个原因吧,总感觉有很多的java 成分在. 要使用N ...

  6. C#开源日志Nlog入门

    c#语言使用的日志比较多,比如:Log4.NLog等,今天我就简单随笔记录哈NLog的使用. 1.NLog的安装: 直接在VS编译器中打开程序包管理器,输入Install-Package NLogin ...

  7. Web APi之异常处理(Exception)以及日志记录(NLog)(十六)

    前言 上一篇文章我们介绍了关于日志记录用的是Log4net,确实也很挺强大,但是别忘了我们.NET有专属于我们的日志框架,那就是NLog,相对于Log4net而言,NLog可以说也是一个很好的记录日志 ...

  8. .NET中使用NLog记录日志

    以前小编记录日志使用的是Log4Net,虽然好用但和NLog比起来稍显复杂.下面小编就和大伙分享一下NLog的使用方式. 引用NLog.Config 在使用NLog之前,我们要首先添加对NLog.Co ...

  9. 从零开始,搭建博客系统MVC5+EF6搭建框架(3),添加Nlog日志、缓存机制(MemoryCache、RedisCache)、创建控制器父类BaseController

    一.回顾系统进度以及本章概要 目前博客系统已经数据库创建.以及依赖注入Autofac集成,接下来就是日志和缓存集成,这里日志用的是Nlog,其实还有其他的日志框架如log4,这些博客园都有很多介绍,这 ...

  10. ElasticSearch+NLog+Elmah实现Asp.Net分布式日志管理

    本文将介绍使用NLOG.Elmah结合ElasticSearch实现分布式日志管理. 一.ElasticSearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布 ...

随机推荐

  1. FTP 错误1

    530-Valid hostname is expected. 所以,当通过主机名连接到FTP之后,输入用户名的时候,采用以下格式:主机名|用户名例如:ftp1.sdsxw.com|tom

  2. dns 安全

    域名系统组织架构 DNS是全球互联网中最重要的基础服务之一,也是如今唯一的一种有中心点的服务.全球域名系统组织与管理架构如下图所示: ICANN  互联网名称与数字地址分配机构(The Interne ...

  3. BZOJ.4566.[HAOI2016]找相同字符(后缀数组 单调栈)

    题目链接 给定两个字符串,求它们有多少个相同子串.相同串的位置不同算多个. POJ3145简化版. 后缀自动机做法见这儿,又快又好写(一下就看出差距了..) //13712kb 4076ms #inc ...

  4. [BZOJ3674]可持久化并查集加强版&[BZOJ3673]可持久化并查集 by zky

    思路: 用主席树维护并查集森林,每次连接时新增结点. 似乎并不需要启发式合并,我随随便便写了一个就跑到了3674第一页?3673是这题的弱化版,本来写个暴力就能过,现在借用加强版的代码(去掉异或),直 ...

  5. grid - 初识

    Grid有三个参数 目前介绍以下两种:grid.inline-grid <view class="grid"> <view class='grid-row'> ...

  6. Cena评测系统在win10中测评cpp程序

    1.装了cena-0.8.1-20110710-setup.exe 2.打补丁:cena-0.8.2-patch.zip 3.菜单->工具->选项->编程语言   修改G++ (mi ...

  7. docker 打开监听端口

    安装docker的镜像ubuntu,链接:http://www.cnblogs.com/liqiu/p/4162719.html 一.登录ubuntu @~ $ docker run -i -t 9b ...

  8. textAngular字体依赖

    textAngular部分按钮显示不正常, 对比后发现是少了字体css <link href="https://cdn.bootcss.com/font-awesome/4.7.0/c ...

  9. Nginx的安装和设置

    Nginx是一个高性能的HTTP服务器和反向代理服务器.当一个服务器访问量太大时(比如C10k问题,Concurrent 10,000 Connection),就可以安装设置一个Nginx服务器,将客 ...

  10. PL/SQL学习笔记之异常

    一:异常 程序执行过程中出现错误情况被称为异常,主要有两种类型的异常: 系统定义的异常 用户定义的异常 二:系统定义的异常 Exception Oracle Error SQLCODE 描述 ACCE ...