asp.netcore Log4Net连接kafka的方法
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的方法的更多相关文章
- ASP.NETCore学习记录(一)
ASP.NETCore学习记录(一) asp.net core介绍 Startup.cs ConfigureServices Configure 0. ASP.NETCore 介绍 ASP.N ...
- Asp.NetCore源码学习[2-1]:日志
Asp.NetCore源码学习[2-1]:日志 在一个系统中,日志是不可或缺的部分.对于.net而言有许多成熟的日志框架,包括Log4Net.NLog.Serilog 等等.你可以在系统中直接使用这些 ...
- 目录---Asp.NETCore轻松学系列【目录】
随笔分类 - Asp.NETCore轻松学系列 Asp.NETCore轻松学系列阅读指引目录 摘要: 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进 ...
- 【目录】Asp.NETCore轻松学系列
随笔分类 - Asp.NETCore轻松学系列 Asp.NETCore轻松学系列阅读指引目录 摘要: 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进 ...
- 壹佰文章最全总结| 《关于ASP.NETCore的分享之路》
学习路线图 (关于学习ASP.NET Core需要了解和掌握的知识点图) 一言不合就来图,各位博客园小伙伴大家好,感觉好久没有写文章了,自从春节开始,中间经历种种,慢慢的就开始微信公众号发文了,原因有 ...
- Asp.NetCore Web开发之ADO.Net
Asp.NetCore可以说是.Net平台开发网站的一大利器,最近的一大段时间,就要跟大家分享,如何使用这一利器开发网站项目. 要学习网站开发,首先要学习如何使用ADO.Net进行数据库数据的增删改 ...
- ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...
- ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)
一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间 (IP_DateTime),些表的信 ...
- ASP.NET中连接数据库的各种方法
ASP.NET中连接数据库的各种方法 连接SQL数据库的方法:(一).在Web.Config中创建连接字符串:1.<add name="ConnectionString" c ...
随机推荐
- H3C 无线交换机的数据转发原理
- 使用awk格式化输出文本
注意:本文并不是一篇awk入门文章,而是偏重实例讲解 awk借鉴了c语法,因此awk在许多地方还保留有c语言的痕迹,比如printf语句:for,if的语法结构等 介绍 最简单地说,AWK 是一种用于 ...
- Linux GCC下strstr的实现以及一个简单的Kmp算法的接口
今天做了一道题,要用判断一个字符串是否是另一个字符串的子串,于是查了一下strstr的实现. 代码如下: char *strstr(const char*s1,const char*s2) { con ...
- 斐波那契数性质 gcd(F[n],F[m])=F[gcd(n,m)]
引理1 结论: \[F(n)=F(m)F(n-m+1)+F(m-1)F(n-m)\] 推导: \[ \begin{aligned} F(n) &= F(n-1)+F(n-2) \\ & ...
- 使用 application.properties 中配置的属性,举例:@Value("${server.port}")
使用 application.properties 中配置的属性:@Value 注解. @RestController public class HelloWorldController { @Val ...
- 为什么在 Java 中128==128返回false,而127==127返回true呢?
为什么在 Java 中128==128返回false,而127==127返回true呢? 有这样一段代码 Integer a=127; Integer b=127; System.out.printl ...
- wordpress调用指定分类文章如何实现
wordpress是很强大的cms系统,你可以通过相关函数就能实现相关的功能.很多网友会问wordpress怎么调用指定分类文章的呢?其实很简单,随ythah一起来看看吧,几行代码就解决了,代码如下 ...
- scala中可以执行外部命令Process
后续用到在总结 Process(s"hadoop fs -rm -r ${path}").!!
- Maven pom文件中dependency scope用法
在Maven中依赖的域有:compile.provided.runtime.system.test.import 一.compile(默认) 当依赖的scope为compile的时候,那么当前这个依赖 ...
- Cyclical Quest CodeForces - 235C (后缀自动机)
Cyclical Quest \[ Time Limit: 3000 ms\quad Memory Limit: 524288 kB \] 题意 给出一个字符串为 \(s\) 串,接下来 \(T\) ...