引用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. 如何使用postman测试流文件_干货|如何用Postman做集成测试
  2. wxWidgets:wxScrolled 示例
  3. mongoDB如何将数据导成csv文件?
  4. [链表]---链表中环的入口节点
  5. linux下vi修改文件用法
  6. MyBatis之优化MyBatis配置文件中的配置
  7. vue根据条件显示字段
  8. pytorch搭建TextRCNN模型与使用案例
  9. 我一定要说服他们php,七夕也不行,我一定要说服他们,PHP语言是最好的语言
  10. centos7安装kubernetes 1.1
  11. win7安装mysql8.0.15教程_MySQL-mysql 8.0.15安装教程
  12. 关于概率论中常错的考点 左偏右偏
  13. lvds输入悬空_MAX 10高速LVDS I/O用户指南
  14. 【测绘程序设计】——大地坐标与空间直角坐标转换
  15. 使用mybatis拦截器实现业务层和持久化层的数据处理、加密、解密、脱敏。
  16. [Oracle 11g r2(11.2.0.4.0)]RAC集群常用命令
  17. 海康录像机能用别的摄像头吗_海康录像机怎么添加网络摄像头,你会了吗?
  18. Spring IOC详解 以及 Bean生命周期详细过程 可以硬刚面试官的文章
  19. 高精度气体压力控制中TESCOM ER5000及其配套背压阀的国产化替代案例分析
  20. JDK自带工具keytool生成ssl证书(web服务https配置)

热门文章

  1. 「华大基因」追风做BaaS平台,基因科技和区块链能碰撞出什么未来?
  2. 期货交易所持仓标准(期货持仓规则)
  3. [Vue warn]: Error in mounted hook: “TypeError: handler.call is not a function“
  4. 【C语言】指针第二弹(指针数组、数组指针、数组传参)
  5. VirtualBox安装Ubuntu21.04教程
  6. C#中连接使用Windows身份验证的sql server数据库
  7. kindeditor用法简单介绍
  8. 计算机网络用语mua,“老公老公mua”是什么梗
  9. 新睿云科普:raid1是什么?特点以及工作方式和优缺点
  10. sql语句-删除表数据drop、truncate和delete的用法