.net core2.0 中使用log4net
一、nuget安装log4net
二、添加log4net.config配置文件
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!--添加自定义节点:log4net type:解析类名,程序集名(log4net.dll)-->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<!--<level value="DEBUG"/>-->
<!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF ALL表示允许所有的日志请求。OFF是拒绝所有的请求。-->
<!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
<level value="ALL"/>
<!--根据log级别记录到不同的日志文件-->
<appender-ref ref="ErrorLog" />
</root>
<!--Error-->
<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
<file value="Log/"/>
<appendToFile value="true" />
<rollingStyle value="Date" />
<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
<DatePattern value="yyyyMMdd"_Error.log"" />
<!--日志文件名是否为静态-->
<StaticLogFileName value="false"/>
<!--多线程时采用最小锁定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--布局(向用户显示最后经过格式化的输出信息)-->
<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message %newline" />
</layout>
<securityContext type="log4net.Util.WindowsSecurityContext">
<credentials value="Process" />
</securityContext>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="ERROR" />
</filter>
</appender>
<!--Error-->
</log4net>
</configuration>
三、编写loghelper
using GrabNovelApi;
using log4net;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Text; namespace Grab.api
{
public static class LogHelper
{
private static readonly ConcurrentDictionary<Type, ILog> Loggers = new ConcurrentDictionary<Type, ILog>(); /// <summary>
/// 获取记录器
/// </summary>
/// <param name="source">soruce</param>
/// <returns></returns>
private static ILog GetLogger(Type source)
{
if (Loggers.ContainsKey(source))
{
return Loggers[source];
}
else
{
ILog logger = LogManager.GetLogger(Startup.repository.Name,source);
Loggers.TryAdd(source, logger);
return logger;
}
} /* Log a message object */ /// <summary>
/// 调试信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Debug(object source, string message)
{
Debug(source.GetType(), message);
} /// <summary>
/// 调试信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="ps">ps</param>
public static void Debug(object source, string message, params object[] ps)
{
Debug(source.GetType(), string.Format(message, ps));
} /// <summary>
/// 调试信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Debug(Type source, string message)
{
ILog logger = GetLogger(source);
if (logger.IsDebugEnabled)
{
logger.Debug(message);
}
} /// <summary>
/// 关键信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Info(object source, object message)
{
Info(source.GetType(), message);
} /// <summary>
/// 关键信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Info(Type source, object message)
{
ILog logger = GetLogger(source);
if (logger.IsInfoEnabled)
{
logger.Info(message);
}
} /// <summary>
/// 警告信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Warn(object source, object message)
{
Warn(source.GetType(), message);
} /// <summary>
/// 警告信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Warn(Type source, object message)
{
ILog logger = GetLogger(source);
if (logger.IsWarnEnabled)
{
logger.Warn(message);
}
} /// <summary>
/// 错误信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Error(object source, object message)
{
Error(source.GetType(), message);
} /// <summary>
/// 错误信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Error(Type source, object message)
{
ILog logger = GetLogger(source);
if (logger.IsErrorEnabled)
{
logger.Error(message);
}
} /// <summary>
/// 失败信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Fatal(object source, object message)
{
Fatal(source.GetType(), message);
} /// <summary>
/// 失败信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Fatal(Type source, object message)
{
ILog logger = GetLogger(source);
if (logger.IsFatalEnabled)
{
logger.Fatal(message);
}
} /* Log a message object and exception */ /// <summary>
/// 调试信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Debug(object source, object message, Exception exception)
{
Debug(source.GetType(), message, exception);
} /// <summary>
/// 调试信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Debug(Type source, object message, Exception exception)
{
GetLogger(source).Debug(message, exception);
} /// <summary>
/// 关键信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Info(object source, object message, Exception exception)
{
Info(source.GetType(), message, exception);
} /// <summary>
/// 关键信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Info(Type source, object message, Exception exception)
{
GetLogger(source).Info(message, exception);
} /// <summary>
/// 警告信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Warn(object source, object message, Exception exception)
{
Warn(source.GetType(), message, exception);
} /// <summary>
/// 警告信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Warn(Type source, object message, Exception exception)
{
GetLogger(source).Warn(message, exception);
} /// <summary>
/// 错误信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Error(object source, object message, Exception exception)
{
Error(source.GetType(), message, exception);
} /// <summary>
/// 错误信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Error(Type source, object message, Exception exception)
{
GetLogger(source).Error(message, exception);
} /// <summary>
/// 失败信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Fatal(object source, object message, Exception exception)
{
Fatal(source.GetType(), message, exception);
} /// <summary>
/// 失败信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Fatal(Type source, object message, Exception exception)
{
GetLogger(source).Fatal(message, exception);
}
}
}
四、使用
.net core2.0 中使用log4net的更多相关文章
- 【翻译】asp.net core2.0中的token认证
原文地址:https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide token ...
- 怎么在.NetCore3.0 中使用Log4net 写日志 及读取配置文件的信息
1:安装Log4Net的 NuGet 包: 我们通常之需要安装这一个包即可,其他的主包会自动被添加进来: insatll-package Microsoft.Extensions.Logging.L ...
- 在core2.0中实现按程序集注入依赖
前言:在Autofac的使用中,提供了个种注入的API其中GetAssemblies()用着特别的舒坦. 1.core2.0也可以使用Autofac的包,但框架自身也提供了默认的注入Api,IServ ...
- .Net Core2.0中使用ADO.NET
学习了解.NET CORE有段时间,没有用其做项目的主要原因就是这么多年积累的类库兼容问题.今天就先解决SqlHelper的兼容性: 建立类库,目标框架选择.NET Core2.0,复制粘贴代码. 问 ...
- 在ASP.NET Core2.0中使用百度在线编辑器UEditor(转)
一.起因 UEditor是百度旗下的富文本编辑器,对于后端上传处理仅提供了Asp.Net 版的支持. 如果想在.Net Core项目中使用,那么后台上传接口需要重构. UEditorNetCore:百 ...
- .Net core2.0日志组件Log4net、Nlog简单性能测试
.Net core之Log4net.Nlog简单性能测试 比较log4net.nlog的文件写入性能(.netcore环境),涉及代码和配置如有不正确的地方,还请批评指正. 原创,转载请著名出处:ht ...
- asp.net core2.0中异常的处理
最近在开发中遇到一些关于如何抛出异常的困惑,在qq群里进行了讨论,有些人认为抛出异常是有理由的,可以对业务流程进行控制,而有些认为抛出异常会导致程序性能低下,我写一些自己的心得吧. 异常的全局处理 a ...
- .net core2.0 中使用DB First
一.新建一个控制台测试项目 1.1.添加引用 1.2.修改项目文件 1.3.添加红框的内容 <ItemGroup> <DotNetCliToolReference Include=& ...
- asp.net core2.0中网站发布的时候,怎么样才配置才可以使视图文件不被打包进去?
默认设置可真是坑~~ https://q.cnblogs.com/q/99680/
随机推荐
- POJ 1088 滑雪(简单的记忆化dp)
题目 又一道可以称之为dp的题目,虽然看了别人的代码,但是我的代码写的还是很挫,,,,,, //看了题解做的简单的记忆化dp #include<stdio.h> #include<a ...
- 【js】数组置空的其他方式及使用场景
数组在js中属于引用型类型. var arr = [1, 2, 3]; a = []; 通常使用以上方式.如果使用场景必须使用方法置空, 可以采用arr.length = 0; 或者使用a.splic ...
- Thawte
Thawte 公司为 VeriSign(即:现更名为Symantec) 全资子公司,是全球第三大数字证书颁发机构(CA),成立于1995年,自1996年正式提供数字证书产品到1999年占领全球市场的4 ...
- V - 吉哥系列故事――完美队形I Manacher
吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要 ...
- A java code
With the help of LiJun I got a piece of JAVA code. With this code, I can do below things like connec ...
- android程序在调试时出现了套接字异常“java.net.SocketException: Permission denied”该如何解决
Socket不能对外连接,错误不会被报出,调试的时候,能看到Exception, 一般是抛出 java.net.socketexception permission denied这个异常.只要你的程序 ...
- JS 缓冲运动 带运动的留言本 小案例
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- [RxJS] AsyncSubject and ReplaySubject - Learn the Differences
We can use Subject as Observable and Observer: // Subject should be only used to emit value for priv ...
- 动态配置 JBOSS ( eap 6.2 ) 数据源
操作环境 windows + jboss eap 6.2 + MyEclipse 10.0 项目用的是jboss eap 6.2,作为Red公司升级后的eap稳定版. 相比之前的 AS 系列,不管是安 ...
- Nginx配置httpsserver
配置HTTPS主机.必须在server配置块中打开SSL协议,还须要指定服务器端证书和密钥文件的位置: server { listen 443; #要加密的域名 server_name www.te ...