1、NuGet添加2个包:

Microsoft.Extensions.Logging.Log4Net.AspNetCore

log4net.Kafka.Core

2、Program里修改CreateWebHostBuilder:

public class Program
{
public static void Main(string[] args)
{
System.Threading.ThreadPool.SetMinThreads(, );
// NLogBuilder.ConfigureNLog("Config/nlog.config");
// NLogBuilder.ConfigureNLog("Config/nlog.config").GetCurrentClassLogger();
CreateWebHostBuilder(args).Build().Run();
} public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args).
ConfigureLogging((context, loggingbuilder) =>
{
//该方法需要引入Microsoft.Extensions.Logging名称空间 loggingbuilder.AddFilter("System", LogLevel.Warning); //过滤掉系统默认的一些日志
loggingbuilder.AddFilter("Microsoft", LogLevel.Warning);//过滤掉系统默认的一些日志
  //最好带上这句话
          loggingbuilder.SetMinimumLevel(LogLevel.Debug);
//var path = Directory.GetCurrentDirectory() + "\\log4net.config";
//不带参数:表示log4net.config的配置文件就在应用程序根目录下,也可以指定配置文件的路径
loggingbuilder.AddLog4Net("Config/log4net.config");
})
.UseStartup<Startup>();
}

添加配置文件:在Config目录下创建log4net.config,内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="KafkaAppender" type="log4net.Kafka.Core.KafkaAppender, log4net.Kafka.Core">
<KafkaSettings>
<broker value="地址1:端口,地址2:端口,地址3:端口" />
<topic value="kafka的topic" />
</KafkaSettings>
<layout type="log4net.Kafka.Core.KafkaLogLayout,log4net.Kafka.Core" >
<appid value="sysName" />
</layout>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="KafkaAppender" />
</root>
</log4net>

broker: Kafka 服务地址,集群可使用,分割;
topic:日志对应的 Topic 名称;
appid:服务唯一标识,辅助识别日志来源;

接下来就可以直接使用了:

using Microsoft.Extensions.Logging;

[Route("api/[controller]")]
public class ValuesController : Controller
{
private readonly ILogger _logger; public ValuesController(ILogger<ValuesController> logger)
{
_logger = logger;
} // GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
_logger.LogInformation("根据appId最后一次测试Kafka!");
return new string[] { "value1", "value2" };
}
}

上线后发现会有记录不下来的情况。解决方法:

appsettings.json文件里有创建项目时候,自动了默认日志级别(Warning)。需要改掉:

  "Logging": {
"LogLevel": {
"Default": "Information",
"System": "Warning",
"Microsoft": "Warning"
}

使用注入的方式,有时候用起来不是很方便,我还是比较喜欢封装个Helper类:

using log4net;
using log4net.Config;
using log4net.Repository;
using System;
using System.Diagnostics;
using System.IO;
using System.Text; namespace Common
{
/// <summary>
/// Helper类
/// </summary>
public class LogHelper
{ private static ILoggerRepository repository { get; set; }
private static ILog _log;
private static ILog log
{
get
{
if (_log == null)
{
Configure();
}
return _log;
}
} public static void Configure(string repositoryName = "NETCoreRepository", string configFile = "Config/log4net.config")
{
repository = LogManager.CreateRepository(repositoryName);
XmlConfigurator.Configure(repository, new FileInfo(configFile));
_log = LogManager.GetLogger(repositoryName, "");
} /// <summary>
///
/// </summary>
/// <param name="message"></param>
/// <param name="e"></param> public static void Debug(string message, Exception e = null)
{
log.Debug(GetCurrentMethodFullName() + " " + message, e);
} public static void Info(string message, Exception e = null)
{
log.Info(GetCurrentMethodFullName() + " " + message, e);
}
public static void Warn(string message, Exception e = null)
{
log.Warn(GetCurrentMethodFullName() + " " + message, e);
}
public static void Error(string message, Exception e = null)
{
log.Error(GetCurrentMethodFullName() + " " + message, e);
}
public static void Fatal(string message, Exception e = null)
{
log.Fatal(GetCurrentMethodFullName() + " " + message, e);
}
private static string GetCurrentMethodFullName()
{
try
{ StringBuilder sb = new StringBuilder();
StackTrace stackTrace = new StackTrace();
return string.Concat(stackTrace.GetFrame().GetMethod().DeclaringType.ToString(), ".", stackTrace.GetFrame().GetMethod().Name);
}
catch
{
return "";
}
}
}
}

这样,就可以在任意地方使用了:

asp.netcore Log4Net连接kafka的方法的更多相关文章

  1. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

  2. Asp.NetCore源码学习[2-1]:日志

    Asp.NetCore源码学习[2-1]:日志 在一个系统中,日志是不可或缺的部分.对于.net而言有许多成熟的日志框架,包括Log4Net.NLog.Serilog 等等.你可以在系统中直接使用这些 ...

  3. 目录---Asp.NETCore轻松学系列【目录】

    随笔分类 - Asp.NETCore轻松学系列 Asp.NETCore轻松学系列阅读指引目录 摘要: 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进 ...

  4. 【目录】Asp.NETCore轻松学系列

    随笔分类 - Asp.NETCore轻松学系列 Asp.NETCore轻松学系列阅读指引目录 摘要: 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进 ...

  5. 壹佰文章最全总结| 《关于ASP.NETCore的分享之路》

    学习路线图 (关于学习ASP.NET Core需要了解和掌握的知识点图) 一言不合就来图,各位博客园小伙伴大家好,感觉好久没有写文章了,自从春节开始,中间经历种种,慢慢的就开始微信公众号发文了,原因有 ...

  6. Asp.NetCore Web开发之ADO.Net

     Asp.NetCore可以说是.Net平台开发网站的一大利器,最近的一大段时间,就要跟大家分享,如何使用这一利器开发网站项目. 要学习网站开发,首先要学习如何使用ADO.Net进行数据库数据的增删改 ...

  7. ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

    在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...

  8. ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)

    一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间 (IP_DateTime),些表的信 ...

  9. ASP.NET中连接数据库的各种方法

    ASP.NET中连接数据库的各种方法 连接SQL数据库的方法:(一).在Web.Config中创建连接字符串:1.<add name="ConnectionString" c ...

随机推荐

  1. Exploit Kit——hacker入侵web,某iframe中将加载RIG EK登录页面,最终下载并执行Monero矿工

    RIG Exploit Kit使用PROPagate注入技术传播Monero Miner from:https://www.4hou.com/technology/12310.html 导语:Fire ...

  2. 25、typing导入Python的数据类型模块、collections集合模块

    一.typing模块 1.typing模块的作用 类型检查,防止运行时出现参数和返回值类型不符合. 作为开发文档附加说明,方便使用者调用时传入和返回参数类型. 该模块加入后并不会影响程序的运行,不会报 ...

  3. PHP memcache 环形队列

    <?php   /**  * PHP memcache 环形队列类  * 因业务需要只保留的队列中的Pop和Push,修改过期时间为0即永久  */ class MQueue {     pub ...

  4. Opencv 初探 常用API

    一.介绍 OpenCV是计算机视觉领域应用最广泛的开源工具包,基于C/C++,支持Linux/Windows/MacOS/Android/iOS,并提供了Python,Matlab和Java等语言的接 ...

  5. 对MVVM的理解

    MVVM是Model-view-ViewMoudel的缩写 Model代表数据类型,也可以在Model中定义数据修改和操作的业务逻辑: View代表UI组件,负责将数据模型转化为UI展现出来: Vie ...

  6. yolov2

    在这篇文章中,作者首先在YOLOv1的基础上提出了改进的YOLOv2,然后提出了一种检测与分类联合训练方法,使用这种联合训练方法在COCO检测数据集(用于检测)和ImageNet分类数据集(用于分类) ...

  7. 文件搜索命令locate

    与find命令不同,locate命令不会去搜索某一个分区或硬盘,而是直接在资料库中搜索,因此,搜索的速度要比find命令快得多,linux系统会定期更新资料库. 利用locate locate命令可以 ...

  8. 程序自动分析(NOI2015)(洛谷P1955)题解

    原题: 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量 ...

  9. 洛谷 P1099 树网的核+P2491 [SDOI2011]消防

    写在前面:由于是双倍经验就放一块了,虽然数据范围差的有点大. 题目链接 题意:在树的直径上选择一条长度不超过s的路径使这条路径上的点到树上任意点的最大距离最小. 这题数据好像非常水,我写了上界n^2不 ...

  10. create-react-app不支持less的解决方式

    进入node_modules\react-scripts\config目录 修改webpack.config.dev.js跟webpack.config.prod.js中关于loader的配置即可,注 ...