引用dll :  log4net.dll

接口类:ILogger.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace HCCD.Base.Comm.NewLogger
{/// <summary>/// 日志接口/// </summary>public interface ILogger{/// <summary>/// 调试日志输出/// </summary>/// <param name="msg">输出内容</param>void Debug(string msg);/// <summary>/// 调试日志输出/// </summary>/// <param name="msg">输出内容</param>/// <param name="ex">输出异常</param>void Debug(string msg, Exception ex);/// <summary>/// 信息日志输出/// </summary>/// <param name="msg">输出内容</param>void Info(string msg);/// <summary>/// 信息日志输出/// </summary>/// <param name="msg">输出内容</param>/// <param name="ex">输出异常</param>void Info(string msg, Exception ex);/// <summary>/// 警告日志输出/// </summary>/// <param name="msg">输出内容</param>void Warn(string msg);/// <summary>/// 警告日志输出/// </summary>/// <param name="msg">输出内容</param>/// <param name="ex">输出异常</param>void Warn(string msg, Exception ex);/// <summary>/// 错误日志输出/// </summary>/// <param name="msg">输出内容</param>void Error(string msg);/// <summary>/// 错误日志输出/// </summary>/// <param name="msg">输出内容</param>/// <param name="ex">输出异常</param>void Error(string msg, Exception ex);/// <summary>/// 致命日志输出/// </summary>/// <param name="msg">输出内容</param>void Fatal(string msg);/// <summary>/// 致命日志输出/// </summary>/// <param name="msg">输出内容</param>/// <param name="ex">输出异常</param>void Fatal(string msg, Exception ex);}
}

接口实现类:LogHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
using log4net.Appender;
using System.IO;
using log4net.Config;namespace HCCD.Base.Comm.NewLogger
{/** Author: Long* Date: 2019-09* Detail: Log4net日志类*//// <summary>/// Log4net日志类/// </summary>public class LogHelper : ILogger{private Dictionary<string, ILog> LogDic = new Dictionary<string, ILog>();private object _islock = new object();private string fileName = string.Empty;/// <summary>/// 日志调用初始化/// </summary>/// <param name="fileSavePath">日志文件保存路径[若路径为空,则默认程序根目录Logger文件夹;]</param>/// <param name="fileName">日志文件名[若文件名为空,则默认文件名:Default]</param>public LogHelper(string fileSavePath, string fileName,string logSuffix = ".log"){try{Init();if (string.IsNullOrEmpty(fileSavePath))fileSavePath = "Logger";if (string.IsNullOrEmpty(fileName))fileName = "Default";this.fileName = fileName;var repository = LogManager.GetRepository();var appenders = repository.GetAppenders();if (appenders.Length == 0) return;var targetApder = appenders.First(p => p.Name == "FileInfoAppender") as RollingFileAppender;targetApder.File = Path.Combine(fileSavePath, this.fileName + logSuffix);targetApder.ActivateOptions();}catch (Exception ex) { }}/// <summary>/// 缓存日志对象/// </summary>/// <param name="name"></param>/// <returns></returns>private ILog GetLog(string name){try{if (LogDic == null){LogDic = new Dictionary<string, ILog>();}lock (_islock){if (!LogDic.ContainsKey(name)){LogDic.Add(name, LogManager.GetLogger(name));}}return LogDic[name];}catch{return LogManager.GetLogger("Default");}}/// <summary>/// 日志记录初始化/// </summary>private void Init(){var file = new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log4net.config"));XmlConfigurator.Configure(file);}/// <summary>/// 调试日志输出/// </summary>/// <param name="msg">输出内容</param>public void Debug(string msg){var log = GetLog(this.fileName);if (log == null){return;}log.Debug(msg);}/// <summary>/// 调试日志输出/// </summary>/// <param name="msg">输出内容</param>/// <param name="ex">输出异常</param>public void Debug(string msg, Exception ex){var log = GetLog(this.fileName);if (log == null){return;}log.Debug(msg, ex);}/// <summary>/// 信息日志输出/// </summary>/// <param name="msg">输出内容</param>public void Info(string msg){var log = GetLog(this.fileName);if (log == null){return;}log.Info(msg);}/// <summary>/// 信息日志输出/// </summary>/// <param name="msg">输出内容</param>/// <param name="ex">输出异常</param>public void Info(string msg, Exception ex){var log = GetLog(this.fileName);if (log == null){return;}log.Info(msg, ex);}/// <summary>/// 警告日志输出/// </summary>/// <param name="msg">输出内容</param>public void Warn(string msg){var log = GetLog(this.fileName);if (log == null){return;}log.Warn(msg);}/// <summary>/// 警告日志输出/// </summary>/// <param name="msg">输出内容</param>/// <param name="ex">输出异常</param>public void Warn(string msg, Exception ex){var log = GetLog(this.fileName);if (log == null){return;}log.Warn(msg, ex);}/// <summary>/// 错误日志输出/// </summary>/// <param name="msg">输出内容</param>public void Error(string msg){var log = GetLog(this.fileName);if (log == null){return;}log.Error(msg);}/// <summary>/// 错误日志输出/// </summary>/// <param name="msg">输出内容</param>/// <param name="ex">输出异常</param>public void Error(string msg, Exception ex){var log = GetLog(this.fileName);if (log == null){return;}log.Error(msg, ex);}/// <summary>/// 致命日志输出/// </summary>/// <param name="msg">输出内容</param>public void Fatal(string msg){var log = GetLog(this.fileName);if (log == null){return;}log.Fatal(msg);}/// <summary>/// 致命日志输出/// </summary>/// <param name="msg">输出内容</param>/// <param name="ex">输出异常</param>public void Fatal(string msg, Exception ex){var log = GetLog(this.fileName);if (log == null){return;}log.Fatal(msg, ex);}}
}

配置类:Log4net.config

<?xml version="1.0"?>
<configuration><configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/></configSections><!--站点日志配置部分--><log4net><!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL --><!-- Set root logger level to ERROR and its appenders --><root><!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF--><!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录--><!--如果没有定义LEVEL的值,则缺省为DEBUG--><level value="ALL"/><appender-ref ref="FileInfoAppender"/></root><appender name="FileInfoAppender" type="log4net.Appender.RollingFileAppender"><!--多线程时采用最小锁定--><lockingModel type="log4net.Appender.FileAppender+MinimalLock"/><file/><param name="AppendToFile" value="true"/><param name="RollingStyle" value="Date"/><datePattern value="&quot;.&quot;yyyy-MM-dd&quot;.log&quot;"/><!--固定文件名--><param name="StaticLogFileName" value="true"/><encoding value="utf-8"/><!--日志输出格式--><layout type="log4net.Layout.PatternLayout,log4net"><param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n"/></layout></appender></log4net>
</configuration>

调用方式

引用:log4net.dll

HCC.Base.Comm.NewLogger.dll

实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HCC.Base.Comm.NewLogger;namespace ConsoleApplication1
{class Program{static void Main(string[] args){LogHelper log = new LogHelper(@"D:\Logger", "stydy");log.Info("广东省个大三噶的首付打好分单发核辐射的");log.Info("广东省个大三噶的首付打好分单发核辐射的", new Exception("请检查系统异常!这个问题是相当的严重。"));log.Fatal("gdsgdsgdsgdsgdsgds");log.Fatal("gdsgdsgdsgdsgdsgds", new Exception("请检查系统异常!这个问题是相当的严重。"));log.Warn("广东省个大三噶电视柜电视柜");log.Warn("gdsgdsgdsgdsgdsgds", new Exception("请检查系统异常!这个问题是相当的严重。"));log.Debug("cbvcbvfgsfgdsgdsgdsgdsgdsgds");log.Debug("gdsgdsgdsgdsgdsgds", new Exception("请检查系统异常!这个问题是相当的严重。"));log.Error("系统异常");log.Error("系统异常",new Exception("请检查系统异常!这个问题是相当的严重。"));}}
}

C#-Log4net 封装log类并自定义log存放路径相关推荐

  1. 创建Okhttp自定义Log

    原文链接:创建OkHttp自定义Log 背景 本文重点讲解如何在使用OkHttp作为网络请求框架的前提下,如何自定义一个适合自己项目的Http Log,从而提升网络Api开发.调试效率. Http协议 ...

  2. Android -- Log日志调试(android.utl.log类)

    Android调试要通过模拟器运行,或者直接USB远程连接到一部手机调试.即使在不关闭模拟进行调试时候,也要经过编译.apk打包.上传apk.运行apk的过程,时间也不短,所以应该在程序固定一次运行中 ...

  3. 为OkGo网络请求增加自定义log功能

    OkGo是基于Okhttp3的封装,所以只需要增加自定义拦截器就可以实现自定义log.(OkGo有一个默认的log拦截器HttpLoggingInterceptor,如果没有特别需求则无需自定义) 第 ...

  4. C++自定义Log工具

    Log工具对于开发者意义很大,可以把所有的Log信息保存下来,便于回溯.问题记录等. glog是一个很优秀的Log工具,但在可扩展性和可配置必上还是有一些不足.例如: 1. 打印时间戳不可通过配置来取 ...

  5. console.log打印:自定义样式(含源码、效果图)

    console.log打印:自定义样式(含源码.效果图) 效果图 · 示下: 案例 · 代码如下: 使用说明: 真的可以实现控制台打印出来的内容:有不同的font-size.不同的color.不同的渐 ...

  6. php log日志管理,PHP日志LOG类定义与用法示例

    本文实例讲述了PHP日志LOG类定义与用法.分享给大家供大家参考,具体如下: /** * PHP log 类 */ class Config{ public static function getCo ...

  7. Android 自定义Log 多模式

    先上个效果图: 模板一: 模板二: LOG常用的方法有以下5个: Log.v() Log.d() Log.i() Log.w() Log.e() .分别对应下图,除Assert 1.Verbose 的 ...

  8. Gin 框架学习笔记(01)— 自定义结构体绑定表单、绑定URI、自定义log、自定义中间件、路由组、解析查询字符串、上传文件、使用HTTP方法

    要实现一个 API 服务器,首先要考虑两个方面:API 风格和媒体类型.Go 语言中常用的 API 风格是 RPC 和 REST,常用的媒体类型是 JSON.XML 和 Protobuf.在 Go A ...

  9. 人人网SDK Demo项目学习获取系统Log类

    renrenSDK中有个获取系统Log的方法 将来可能用的到吧 /*** $id$*/ package com.renren.api.connect.android.demo;import java. ...

最新文章

  1. 摄像头ISP系统原理(上)
  2. web前端的就业前景好不好
  3. PAT (Basic Level) Practise 1040 有几个PAT(DP)
  4. 共享内存 传一个类指针_共享内存介绍:Shared Memory
  5. 僵尸进程和孤儿进程 转载
  6. educoderpython答案顺序结构程序设计_答案汇总:土木机械类+计算机类
  7. debconf-set-selections mysql_docker 静默安装mysql
  8. 华为手机怎么隐藏按键图标_mac桌面图标怎么快速隐藏?
  9. 免费CMS系统的广告如何去掉
  10. SystemVerilog搭建测试平台---第一章:验证导论
  11. ProtoBuf和Netty的简单使用
  12. lstm 做航迹预测预测_用lstm预测酒店收入的第一步
  13. 计算机系统的基础必备软件,电脑必装软件推荐:基础篇——够用就行
  14. 简单74LS138介绍(抄自原理图)
  15. go语言 过滤 html,golang 去除html标签-Go语言中文社区
  16. osu计算机专业排名,OSU计算机专业有奖学金啦~
  17. 关于ubuntu的详细介绍
  18. java自定义font_java – 设置自定义字体
  19. 爬虫出现UnicodeEncodeError: ‘latin-1‘ codec can‘t encode character *** in position 8328: Body***问题
  20. AutoJs学习-关于各种头条阅读自动赚金币的思路-实践中

热门文章

  1. Ant Design Pro ProTable 自定义搜索菜单操作栏和搜索事件
  2. 20145209刘一阳《网络对抗》Exp9 Web安全基础实践
  3. ACP 学习-06-对象存储 OSS
  4. canvas入门--绘制刮刮卡
  5. 目标分割算法之连通域分析
  6. Visio2013中插入Mathtype公式的方法
  7. hdu 1028 母函数
  8. 4000亿只,堪称25年来最大蝗灾,对资本市场的三大影响!
  9. 迅为RK3588开发板测试 OTA 远程升级
  10. 物联网卡平台该如何选择