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. shell中read用法

    1. Read的一些选项 Read可以带有-a, -d, -e, -n, -p, -r, -t, 和 -s八个选项. -a :将内容读入到数值中 1 2 3 echo -n "Input m ...

  2. 轻量级C#编辑器RoslynPad((基于Roslyn编译器))

    简介 RoslynPad是一个Apache 2.0协议开源的轻量级C#编辑器.支持自动完成,语法提示,修改建议等功能.很适合平时随手写个C#程序看看运行结果. 目前版本:0.10.1,无需保存也可以运 ...

  3. Linux下能访问Nginx,本地无法访问

    在虚拟机的Linux上安装好Nginx后,启动Nginx服务,在Linux环境下,输入ip直接可以访问到Nginx的欢迎界面,而在电脑本地访问不到界面,出现错误. 显示:你的网络出现问题或代理服务器问 ...

  4. beforeRouteEnter 与 beforeRouteUpdate(watch $route 对象) 的区别

    项目 区别 适用场景 网址 beforeRouteEnter beforeRouteEnter 守卫 不能 访问 this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建.不过,你可以通过 ...

  5. jquery ajax在ie9下跨域不执行 crossDomain: true == !(document.all)

    <!DOCTYPE html> <html> <head> <title>jQuery CORS in IE7 - IE10</title> ...

  6. VSCode 如何操作用户自定义代码片段

    自己写了一些根据自己习惯弄成的自定义代码片段,不喜跳过 很简单,快速过一下,F1,然后输入 snippets vue代码片段 { // Place your snippets for vue here ...

  7. eslint Cannot read property 'range' of null错误

    eslint Cannot read property 'range' of null错误   手动添加的配置,2个项目OK,还个项目 运行报错 Cannot read property 'range ...

  8. CT107D电路解析

    1.译码器: 其中,A.B.C为输入端, 对应关系如下: CBA  十进制    输出(低电平) 000      0           Y0 001      1           Y1 010 ...

  9. Thanos prometheus 集群以及多租户解决方案docker-compose 试用(一)

    prometheus 是一个非常不多的metrics 监控解决方案,但是对于ha 以及多租户的处理并不是很好,当前有好多解决方案 cortex Thanos prometheus+ influxdb ...

  10. 2.深入学习Servlet的ServletContext对象

    一.建立项目servlet01 在入门Servlet项目中建立一个子项目模块(此处不再赘述如何建立),补全maven项目中的java和resources文件夹,添加类HelloServlet.java ...