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 打造自己的ImageLoader
Android 打造自己的ImageLoader 学习和参考 Android开发艺术探索 https://blog.csdn.net/column/details/15318.html 郭霖大神的Gl ...
- iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)
iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...
- Maltego更新到4.1.6
Maltego更新到4.1.6 Maltego最近更新到4.1.6.由于Kali Linux软件源并没有提供此次更新包,用户需要进入Maltego进行手动更新.在起始页面中,双击状态栏右下角的黄色 ...
- CSDN 博客 美化 个性化
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha ========= ======== <a href=" http:// ...
- C++ 友元函数总结
1.为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 具体来说:为了使其他类的成员函数直接访问该类的私有变量 即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同 ...
- db2配置、db和dbm
----start DB2 可以在四个不同层面配置: 一:系统环境变量(System Environment Variable) 系统环境变量用来配置DB2 的使用环境: 查看:set | grep ...
- libreoffice.在Centos中使用时碰到X11 error的解决办法
先安装 libreoffice yum install libreoffice -y 尝试DOC转PDF是碰到报错 解决办法, 要安装多一个东西 yum install libreoffice-hea ...
- Github如何回退/回滚到某个版本
当然你可以直接在命令行使用 git reset --hard <commit ID号> 或者 git reset --hard HEAD^来进行回退
- bat遍历目录
方法一: for /r D:\要遍历的目录\ %%i (*.exe) do ( echo %%i ) 方法二: set DestPath=D:\你的目录\ rem 你的后缀 set Dest ...
- opencv error: undefined reference to `png_set_expand_gray_1_2_4_to_8@PNG16_0'
问题1:/usr/bin/ld: warning: libpng16.so.16, needed by /home/andrei/anaconda/lib/libopencv_highgui.so, ...