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的搜索服务器.它提供了一个分布 ...
随机推荐
- 【随笔】Android应用市场搜索优化(ASO)
参考了几篇网上的关于Android应用市场搜索优化(ASO)的分析,总结几点如下: 优化关键字:举例目前美团酒店在各Android市场上的关键字有“美团酒店.钟点房.团购.7天”等等,而酒店类竞对在“ ...
- 5.27 Test
1.COGS.2039. 树的统计 思路: 各种方法. 代码: 1.遍历树1 时间 0.314 s 平均内存 2.96 MB #include<cstdio> using name ...
- replace方法,替代敏感字符
var val = $("#id").val(); var reg =/垃圾|你大爷|你妹的/g; if(val){ // false : isNaN-- 0-- undef ...
- unity3d脚本语言中的引用类型
在之前的文文里有说到,值类型和引用类型,那么这会就单独说下引用类型: Unity3D中的C#语言提供了专门的类型来为开发者提供使用C#开发游戏的便利条件: 在该引擎中,使用UnityEngine命名空 ...
- C#高级编程----反射的小结
C#反射的应用小结 1.何谓反射? 反射就是在运行的时候发现对象的相关信息.根据这些信息可以动态的执行对象的方法以及获取对象的属性所存储的值.使用.NET编写的代码时自动反射的,或者说是自我描述的.之 ...
- normalize.css的使用
normalize.css有下面这几个目的: 保护有用的浏览器默认样式而不是完全去掉它们一般化的样式:为大部分HTML元素提供修复浏览器自身的bug并保证各浏览器的一致性优化CSS可用性:用一些小技巧 ...
- 版本控制-git(二)
上次文章给大家介绍了Git的一些基本知识(http://www.cnblogs.com/jerehedu/p/4582398.html),并介绍了使用git init初始化化版本库,使用git add ...
- phpstorm10使用服务激活
现在官网已经更新到WebStorm 11.PhpStorm 10,找到一个很便捷的方法,不需要注册码了.安装完成,打开软件看到输入注册码界面的时候,切换到第二个选项,输入:http://idea.la ...
- Android -- 再来一发Notification
之前写过一个Notificaiton的文章,用上面的方式去操作也是OK的,但是到后面的SDK之后,有些方法被弃用,甚至我到SDK23的时候,我发现有些方法直接没了,所以在这里重新写一下最新的用法. h ...
- Andorid源码 4.4 TAG
Fetching project platform/frameworks/opt/timezonepickerremote: Counting objects: 11169, doneremote: ...