一、用法

1、引入包:https://www.nuget.org/packages/log4net/

2、Main函数

using System;
using System.IO;
using log4net;
using log4net.Config; namespace Log4NetDemo
{
class Program
{
static void Main(string[] args)
{
var repository = LogManager.CreateRepository("NETCoreRepository");
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
var log = LogManager.GetLogger("NETCoreRepository", typeof(Program)); log.Info("this is a info.");
log.Error("this is an error:", new Exception("this is error."));
log.Fatal("this is a fatal.");
log.Warn("this is a warn");
Console.WriteLine("finish.");
}
}
}

  如果不想创建Repository的话,也可以写个工具类,统一在名称空间上备注完成。

using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = false)]
namespace MyProj.Utils.Log
{
public class LogUtils
{
private ILog log = LogManager.GetLogger(typeof(LogUtils)); public void Debug(object message) => log.Debug(message);
public void Debug(object message, Exception exception) => log.Debug(message, exception);
public void DebugFormat(string format, params object[] args) => log.DebugFormat(format, args);
public void DebugFormat(string format, object arg0) => log.DebugFormat(format, arg0);
public void DebugFormat(string format, object arg0, object arg1, object arg2) => log.DebugFormat(format, arg0, arg1, arg2);
public void DebugFormat(string format, object arg0, object arg1) => log.DebugFormat(format, arg0, arg1);
public void Error(object message) => log.Error(message);
public void Error(object message, Exception exception) => log.Error(message, exception);
public void ErrorFormat(string format, object arg0, object arg1, object arg2) => log.ErrorFormat(format, arg0, arg1, arg2);
public void ErrorFormat(string format, object arg0, object arg1) => log.ErrorFormat(format, arg0, arg1);
public void ErrorFormat(string format, object arg0) => log.ErrorFormat(format, arg0);
public void ErrorFormat(string format, params object[] args) => log.ErrorFormat(format, args);
public void Fatal(object message) => log.Fatal(message);
public void Fatal(object message, Exception exception) => log.Fatal(message, exception);
public void FatalFormat(string format, object arg0, object arg1, object arg2) => log.FatalFormat(format, arg0, arg1, arg2);
public void FatalFormat(string format, object arg0) => log.FatalFormat(format, arg0);
public void FatalFormat(string format, params object[] args) => log.FatalFormat(format, args);
public void FatalFormat(string format, object arg0, object arg1) => log.FatalFormat(format, arg0, arg1);
public void Info(object message, Exception exception) => log.Info(message, exception);
public void Info(object message) => log.Info(message);
public void InfoFormat(string format, object arg0, object arg1, object arg2) => log.InfoFormat(format, arg0, arg1, arg2);
public void InfoFormat(string format, object arg0, object arg1) => log.InfoFormat(format, arg0, arg1);
public void InfoFormat(string format, object arg0) => log.InfoFormat(format, arg0);
public void InfoFormat(string format, params object[] args) => log.InfoFormat(format, args);
public void Warn(object message) => log.Warn(message);
public void Warn(object message, Exception exception) => log.Warn(message, exception);
public void WarnFormat(string format, object arg0, object arg1) => log.WarnFormat(format, arg0, arg1);
public void WarnFormat(string format, object arg0) => log.WarnFormat(format, arg0);
public void WarnFormat(string format, params object[] args) => log.WarnFormat(format, args);
public void WarnFormat(string format, object arg0, object arg1, object arg2) => log.WarnFormat(format, arg0, arg1, arg2);
}
}

3、新建一个log4net.config配置文件,并设置输出到程序目录下。

<?xml version="1.0" encoding="UTF-8"?>

<configuration status="ON">
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
</appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs/" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<staticLogFileName value="false" />
<datePattern value="yyyyMMdd'.log'" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root level="ALL">
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>

4、效果:

C#中使用log4net框架做日志输出的更多相关文章

  1. MVC 中使用log4net 打印重复日志解决方法

    最近在项目中引用log4net 来打印日志,会发现在同一时间点 打印重复记录: 详见图

  2. Shell 从日志文件中选择时间段内的日志输出到另一个文件

    Shell 从日志文件中选择时间段内的日志输出到另一个文件 情况是这样的,某系统的日志全部写在一个日志文件内,所以这个文件非常大,非常长,每次查阅的时候非常的不方便.所以,相关人员希望能够查询某个时间 ...

  3. asp.net Web项目中使用Log4Net进行错误日志记录

      使用log4net可以很方便地为应用添加日志功能.应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能.同时,通过外部配置文件,用户可以不用重新编译程序就能 ...

  4. 在ASP.NET MVC中使用Log4Net记录异常日志,出错时导向到静态页

    本篇体验在ASP.NET MVC 4中使用Log4Net记录日志. 通过NuGet安装Log4Net. 需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息. 大致的思路是: ...

  5. asp.net mvc中加入log4net记录错误日志

    直接上代码示例:https://share.weiyun.com/aff36f2547514cfefe129ebb8ccb28ef 首先添加加log4net的dll,推荐用nuget.... 贴上配置 ...

  6. 如何在通用权限管理系统中集成log4net日志功能

    开发人员都知道,在系统运行中要记录各种日志,自己写一个日志功能,无论是在效率还是功能扩展上来说都不是很好,目前大多用的是第三方的日志系统,其中一个非常有名,用的最多的就是log4net.下面是关于这个 ...

  7. C#中四步轻松使用log4net记录本地日志

    在这里,记录我在项目中使用log4net记录本地日志的步骤.在不会之前感觉很难,很神秘,一旦会了之后其实没那么难.其实所有的事情都是一样的,下面我就分享一下我使用log4Net的经验. 第一步:首先从 ...

  8. C#中四步轻松使用log4net记录本地日志(WPF有点小区别)

    在这里,记录我在项目中使用log4net记录本地日志的步骤.在不会之前感觉很难,很神秘,一旦会了之后其实没那么难.其实所有的事情都是一样的,下面我就分享一下我使用log4Net的经验. 第一步:首先从 ...

  9. ASP.NET MVC中Log4Net记录错误日志的使用

    第一.在管理NuGet程序包 =>下载 Log4Net 第二.在web.config配置Log4Net 1:在<configuration>节点下 <configSection ...

随机推荐

  1. hdu4533 线段树维护分段函数

    更新:x1,y1,x2,y2不用long long 会wa.. #include<iostream> #include<cstring> #include<cstdio& ...

  2. ORACLE分页查询SQL语法——高效的分页

    --1:无ORDER BY排序的写法.(效率最高)--(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT  ...

  3. HDU5730

    cdq分治+FFT 转移:dp[i]=Σdp[i-j]*a[j](1<=j<=i)

  4. Codeforces 891C Envy

    Envy 感觉这种最小生成树上的啥题都差不多的解法.. #include<bits/stdc++.h> #define LL long long #define fi first #def ...

  5. BZOJ5045 打砖块 2017年9月月赛 其他

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5045 题意概括 有一堵墙. 现在挖掉某些砖.如果有相邻的某两个砖没有了,那么他们中上方的那块也没了 ...

  6. 【noip模拟赛8】魔术棋子

    描述 在一个M*N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中的数.一个棋子从左上角走到右下角,只能向右或向下行动,请问此棋子走到右下角后,模(mod)K ...

  7. 通过反射的方式注入自己的ShutdownHook并清除其他HOOK

    String className = "java.lang.ApplicationShutdownHooks"; Class<?> clazz = Class.forN ...

  8. 项目冲刺 Seventh

    Seventh Sprint 1.各个成员今日完成的任务 蔡振翼:编写博客 谢孟轩:消息功能的实现,各页面与功能的调试优化 林凯:优化注册判断逻辑,整合相关代码 肖志豪:帮助组员 吴文清:完成管理员信 ...

  9. LOJ.6062.[2017山东一轮集训]Pair(Hall定理 线段树)

    题目链接 首先Bi之间的大小关系没用,先对它排序,假设从小到大排 那么每个Ai所能匹配的Bi就是一个B[]的后缀 把一个B[]后缀的匹配看做一条边的覆盖,设Xi为Bi被覆盖的次数 容易想到 对于每个i ...

  10. POJ.1655 Balancing Act POJ.3107 Godfather(树的重心)

    关于树的重心:百度百科 有关博客:http://blog.csdn.net/acdreamers/article/details/16905653 1.Balancing Act To POJ.165 ...