NLog 自定义Target
http://nlog-project.org/2015/06/30/extending-nlog-is-easy.html
新建一个类库,命名规则为NLog.*.dll
定义一个类输出日志到RabbitMQ
[Target("MQ")] public class MQTarget : TargetWithLayout { public MQTarget() { } public string Host { get; set; } public string UserName { get; set; } public string Password { get; set; } public string VirtualHost { get; set; } protected override void Write(LogEventInfo logEvent) { string message = this.Layout.Render(logEvent); SendMessageToMQ(Host,message); } private void SendMessageToMQ(string host,string message) { var factory = new ConnectionFactory() { HostName = Host,UserName= UserName, Password= Password, VirtualHost= VirtualHost}; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "apicenter", durable: false, exclusive: false, autoDelete: false, arguments: null); //string message = "Hello World!"; var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: "apicenter", basicProperties: null, body: body); Console.WriteLine(" [x] Sent {0}", message); } } }
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" autoReload="true" internalLogLevel="info" internalLogFile="Logs\internal-nlog.txt"> <!-- enable asp.net core layout renderers --> <extensions> <add assembly="NLog.Web.AspNetCore"/> <add assembly="NLog.MQ"/> </extensions> <!-- the targets to write to --> <targets> <!-- write logs to file --> <target xsi:type="File" name="allfile" fileName="Logs\nlog-all-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" /> <!-- another file log, only own logs. Uses some ASP.NET core renderers --> <target xsi:type="File" name="info" fileName="Logs\nlog-info-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" /> <target xsi:type="File" name="error" fileName="Logs\nlog-error-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" /> <target xsi:type="MQ" name="mq" host="10.202.80.196" UserName="bm" Password="bm_p@ss" VirtualHost="NIST" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" /> </targets> <!-- rules to map from logger name to target --> <rules> <!--All logs, including from Microsoft--> <logger name="*" minlevel="Info" writeTo="allfile" /> <!--Skip non-critical Microsoft logs and so log only own logs--> <logger name="Microsoft.*" maxLevel="Info" final="true" /> <!-- BlackHole without writeTo --> <logger name="*" level="Info" writeTo="info" /> <logger name="*" level="Error" writeTo="error" /> <logger name="*" level="Error" writeTo="mq" /> </rules> </nlog>
这里需要注意一点,部署到Linux中的话,需要把nlog.config中的\ 替换成 /
Filter
定义一个日志记录sql
namespace LogExtension { public class NLogSql { private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); public static void Info(string message) { logger.Info(message); } } }
调用方法
public static void LogSql(string txt) { NLogSql.Info(txt); }
配置target
<target xsi:type="File" name="sql" fileName="Logs/sql/nlog-sql-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" /> <target xsi:type="File" name="info" fileName="Logs/info/nlog-info-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
配置rule
<logger name="*" level="Info" writeTo="info" /> <logger name="LogExtension.NLogSql" level="Info" writeTo="sql" />
这样日志不仅会写到sql文件中,也会写到info中
定义filter
<logger name="*" level="Info" writeTo="info" > <filters> <when condition="equals(logger,'LogExtension.NLogSql')" action="Ignore"/> </filters> </logger>
这样就在info中排除了sql的日志。
File
<target xsi:type=" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
文件大小每超过1M就生成一个新的文件
<?xml version="1.0" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <!-- Log in a separate thread, possibly queuing up to messages. When the queue overflows, discard any extra messages--> <target name=" overflowAction="Discard"> <target xsi:type="File" fileName="${basedir}/logs/${level}.txt" keepFileOpen="true" /> </target> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="file" /> </rules> </nlog>
支持异步写文件
wrapper
https://github.com/nlog/nlog/wiki/Configuration-file#default-wrappers
https://github.com/nlog/nlog/wiki/Configuration-file#asynchronous-processing-and-wrapper-targets
NLog 自定义Target的更多相关文章
- NLog自定义Target之MQTT
NLog是.Net中最流行的日志记录开源项目(之一),它灵活.免费.开源 官方支持文件.网络(Tcp.Udp).数据库.控制台等输出 社区支持Elastic.Seq等日志平台输出 实时日志需求 在工业 ...
- 转:NLog 自定义日志内容,写日志到数据库;修改Nlog.config不起作用的原因
转:http://www.cnblogs.com/tider1999/p/4308440.html NLog的安装请百度,我安装的是3.2.NLog可以向文件,数据库,邮件等写日志,想了解请百度,这里 ...
- NLog自定义字段写入数据库表,示例
//自定义字段写入NLog日志 private void saveNLog(InvokeLogModel model) { LogEventInfo ei = new LogEventInfo(); ...
- 为NLog自定义LayoutRenderer
长话短说 前文<解剖HttpClientFactory,自由扩展HttpMessageHandler>主要想讲如何扩展HttpMessageHandler, 示例为在每个Http请求中的 ...
- NetCore2.2使用Nlog自定义日志写入路径配置方式
在一些特定场景的业务需求下,日志需要写入到不同的路径下提供日志分析.第一种:默认Nlog可以通过日志级别来区分路径,——优点是不需要额外配置,开箱即用——缺点是不够灵活,如果超过级别数量,则不满足需求 ...
- NLog 自定义字段 写入 oracle
1.通过Nuget安装NLog 下载,简单入门 请参照 我刚才转的几篇文章,下面我直接贴代码 2.建表语句 create table TBL_LOG ( id ) not null, appname ...
- [转]NLog 自定义字段 写入 oracle
本文转自:http://www.cnblogs.com/skyapplezhao/p/5690695.html 1.通过Nuget安装NLog 下载,简单入门 请参照 我刚才转的几篇文章,下面我直接贴 ...
- 关于NLog的target和Layout
这个没啥好说的,都是用别人的东西,看文档就行了,写的很详细. https://github.com/NLog/NLog/wiki/Configuration-file https://github.c ...
- NLog 安装使用
1:安装 Install-Package NLog.Config 或 通过Nuget 2:Log levels Trace 非常详细的信息,一般在开发时使用. Debug 比Trace稍微少一点一般不 ...
随机推荐
- Java程序简介
---恢复内容开始--- java程序的基本构成: HelloDate.java package 语句 import 语句 类定义 -class 一个文件只能有一个public 类 (与文件同名) 类 ...
- jquery基础知识随笔
<html> <head> <script type="text/javascript" src="/jquery/jquery.js&qu ...
- cookie存储
cookie就是用来存储数据的 cookie先分装函数 这是用来存数据的函数 function setCookie(name,value,iDay){ if(iDay){ var oDate = ne ...
- 通俗易懂--岭回归(L2)、lasso回归(L1)、ElasticNet讲解(算法+案例)
1.L2正则化(岭回归) 1.1问题 想要理解什么是正则化,首先我们先来了解上图的方程式.当训练的特征和数据很少时,往往会造成欠拟合的情况,对应的是左边的坐标:而我们想要达到的目的往往是中间的坐标,适 ...
- Java在ServletContextListener、过滤器、拦截器解决对象无法注入问题
1.通用方法: // 数据库日志操作对象 private LogInfoServiceIFC logInfoServiceProxy; @Override public void contextIni ...
- Python Day 7
阅读目录 内容回顾: 数据类型相互转换: 字符编码: ##内容回顾 #1.深浅拷贝 ls = [1, 'a', [10]] 值拷贝:直接赋值 ls1 = ls, ls中的任何值发生改变,ls1中的值都 ...
- Codeforces 1091D New Year and the Permutation Concatenation 找规律,数学 B
Codeforces 1091D New Year and the Permutation Concatenation https://codeforces.com/contest/1091/prob ...
- vue + spring boot + spring security 前后端分离 携带 Cookie 登录实现 只写了个登录
最近想弄一下vue 所以就自己给自己找坑入 结果弄的满身是伤 哈哈哈 首先我说下 前后端分离 跨域请求 我在网上找了一些 可是都是针对于 spring boot 的 我自己还有 securi ...
- css 文本超出2行就隐藏并且显示省略号
overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webk ...
- [swarthmore cs75] Lab 0 Warmup & Basic OCaml
课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第1次大作业. 什么是编译 编译就是执行Program->Program'转换的过程,如下 ...