log4net配置经验教训

2023-05-16

第一点:权限问题,一定要给要写入日志文件的目录宽松的权限。
本人就是因为权限问题浪费了很多时间。(因为iis user 的权限是相对低的,log4net又需要创建文件,所以权限一定要给足,后面可以用应用程序池配置)

本人想用单独配置文件,所以基本步骤如下:
1:下载net4log,
具体地址就不贴了,给一个官网的配置说明页:

http://logging.apache.org/log4net/release/manual/configuration.html

2:使用对应版本的dll,

       一定要使用对应版本的,我就因为使用的版本不对应,浪费了时间
       2.0就是选2.0,4.0就选4.0

3:在项目中引入dll

4:使用单独的配置文件,这样做的好处–修改log4net的配置不会影响到整个应用重启。我的路径是:
Configure目录下,log4netConfig.xml文件
Configure\log4netConfig.xml
具体内容:自己可看相应的说明

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <!--日志记录组建配置-->
  <log4net>
    <!-- Console部分log输出格式的设定 -->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
      </layout>
    </appender>
    <!-- 日志文件部分log输出格式的设定 -->
    <appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="ERROR" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
      <File value="Logs\\err.log" />
      <PreserveLogFileNameExtension value="true" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <appender name="infoAppender" type="log4net.Appender.RollingFileAppender">
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
      <File value="Logs\\info.log" />
      <PreserveLogFileNameExtension value="true" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <appender name="debugAppender" type="log4net.Appender.RollingFileAppender">
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="DEBUG" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
      <File value="Logs\debug.log" />
      <PreserveLogFileNameExtension value="true" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <appender name="perfAppender" type="log4net.Appender.RollingFileAppender">
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="INFO" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
      <File value="Logs\perf.log" />
      <PreserveLogFileNameExtension value="true" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %logger - %message%newline" />
      </layout>
    </appender>

     <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs\Log_" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd'.txt'" />
      <staticLogFileName value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <header value="------------------------------------------------------------  
" />
        <ConversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
      </layout>
    </appender>

    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
      <level value="ALL" />
      <appender-ref ref="errorAppender" />
      <appender-ref ref="infoAppender" />
      <appender-ref ref="debugAppender" />
    </root>
    <!-- Setup the perfAppender category, add the appenders and set the default level 因为root与logger是父与子的关系,所以不应将:perfAppender在root中显示,避免重复 -->
    <logger name="Performance" additivity="false">
      <level value="ALL" />
      <appender-ref ref="perfAppender" />
    </logger>


  </log4net>

</configuration>

5:修改AssemblyInfo.cs
用于log4net能够读取配置文件。指定配置文件的路径

 //定义log4net配置文件路径
//[assembly: log4net.Config.DOMConfigurator(ConfigFile = @"Configure\log4netConfig.xml", Watch = true)]
//也可用上面的语句,上面的是老的方式
[assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = @"Configure\log4netConfig.xml", Watch = true)]

6:新建存放配置文件的目录,**

并授权可写很重要

**

7:在代码中使用:
首先要定义在类体内:

//DataHandler 是类名,用于反射,多查查就知道了,用的时候替换掉;logger也是可以更改的,后面用的时候记住就好。
 private static readonly ILog logger = LogManager.GetLogger(typeof(DataHandler));
//在想要用的位置就可以使用了。具体的后面的是和配置文件对应的,如括号内的是要输出的字符串。其中的Debug是日志级别,以标明该日志记录是什么级别的日志,再在配置文件中appender内配置相应的级别就可以将内容写入到相应的文件中。
 logger.Debug("Debug test");

结束,看对应目录下是否有文件。

log4net的架构分为四个要素:logger;appender;layout;filter。
logger是负责日志的记录者
appender提供记录的介质
layout负责把记入的内容格式化
filter负责把内容进行筛选
可以说,整个过程就是一个日志流水线,每个成员负责其中的一个环节
logger发出记录信息,appender接到信息,根据内部的layout配置对记录信息格式化,根据filter决定此信息是否被过滤掉,最后,将其序列化
log4net具体思路:通过配置文件实例化对象Logger(产生)->appender(接收)->过滤日志(filter)->layout序列化输出 appender的记录介质

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

log4net配置经验教训 的相关文章

  • Log4Net配置日志级别

    我该如何制作Log4net http logging apache org log4net index html只记录Info级别的日志 这可能吗 只能设置一个阈值吗 这就是我所拥有的 它按照我的预期记录了信息及以上内容 我能做些什么让它只
  • 根据方法名称过滤 log4net - 不太明白

    我使用 log4net 来记录我的 Web 应用程序的进度 使用 Log4PostSharp 来 AOP 注入所有方法 这达到了记录 几乎 所有内容的预期效果 并且很好 我现在需要将 Page Load 方法记录到文件 控制台 显然 我可以
  • log4net 每次运行一个文件

    我需要我的应用程序在每次运行时创建一个日志文件 我的首选格式是App log yyyy MM dd HH mm ss 如果那不可能 我会满足App log yyyy MM dd counter 这是我当前的附加程序配置
  • 使用 FileSystemWatcher 观察 log4net 日志文件

    我创建了简单的 WPF 控件来监视日志文件中的更改 我使用 FileSystemWatcher 来监视特定文件 我的配置 Directory System IO Path GetDirectoryName logFileFullPath F
  • 如何使用 log4net 记录 Trace 消息?

    我正在使用 log4net 将写入日志消息记录到滚动日志文件中 现在我还将重定向所有跟踪消息System Diagnostics Trace到该日志文件 我该如何配置呢 我试图在 log4net 文档中找到任何相关内容 但没有成功 有可能吗
  • log4net 日志正在创建但仍为空

    我正在尝试使用log4net http logging apache org log4net 当我启动应用程序时 它会创建日志文件 但无论我调用多少次Log Info Application Started 它仍然是空的 我研究了谷歌返回的
  • Orchard CMS 如何进行日志记录?

    我正在使用 Orchard CMS 它对我来说是更好的 CMS 我想了解它如何进行日志记录以及我是否可以添加自己的日志记录 我看到果园使用NullLogger类 它不起作用 我已打开 App Data Logs 文件夹并看到其中有日志文件
  • 在asp.net core 3.1中使用log4net和Microknights登录数据库不起作用

    我看过很多文章说 net core 不支持 AdoNetAppender 但我们可以使用 MicroKnights 来做同样的事情 我正在尝试使用相同的方法在 net core 3 1 应用程序中实现数据库日志记录 但仍然没有成功 我放置在
  • Log4Net 部署时不记录日志

    我正在使用 log4net 来记录我的应用程序 这是一个 WPF 应用程序 日志记录在调试模式下运行良好 但不适用于我部署的版本 该应用程序安装在 C Program Files x86 MyApp 中 我使用 InnoSetup 创建安装
  • 为什么 nhibernate 需要 Log4Net?

    我将使用 asp net mvc3 和 nhibernate 3 2 构建我的应用程序 我决定使用 Elmah 记录所有错误消息 我记得 nhibernate 支持 log4net 并用它来记录所有查询 如果我不关心将查询输出到日志文件 我
  • 你的 log4net 配置中有什么?黑客、优化、观察?

    这是我的 log4net 配置文件
  • Log4Net 在单独的配置文件中

    我需要为新项目配置 log4net 当我将所有信息保存在 App config 文件中时 一切都工作得很好 我想把log4net的配置放在一个单独的配置文件中 取App1 config 这是我的 app config 完美运行
  • 如何禁止在应用程序启动时创建空日志文件?

    我已经在我的应用程序中成功配置了 log4net 但有一件事对我来说有点烦人 即使没有发生错误 日志文件也会在我的应用程序启动后创建 空 我想仅在出现错误后才创建日志文件 我实际上在这个线程中找到了一种方法来做到这一点 http www l
  • 如何在 Xamarin 中使用 Log4Net

    我有一个使用 Xamarin MonoTouch 的应用程序 我想在其中使用日志记录框架 搜索时我遇到了 Log4Net http logging apache org log4net http logging apache org log
  • Crystal Reports 部署时出错。无法加载文件或程序集“log4net”

    请帮忙 我有一个在 VS2010 中构建的 Web 应用程序 我们正在使用 2010 年的 CR 插件 一切都在我们的本地计算机上完美运行 当我们将 Web 应用程序部署到 Server 2008 时 应用程序运行良好 直到我们尝试获取报告
  • 我在这个 log4net 实现中做错了什么?

    与许多其他人一样 我正在尝试将 Log4net 实现到我的 C net 应用程序中 但我无法让它为我工作 我已经做了很多搜索 包括在这个网站上 并尝试了许多不同的解决方案 但还没有任何对我有用的解决方案 所以简单的问题是 我做错了什么 As
  • nHibernate 使用 Log4Net 进行日志记录,线程会话问题

    大家好 这里有一个小问题 我正在努力解决这个问题 我目前正在开始使用 nHibernate 由于工作需要 我不得不这样做 并且我在 nHibernate 的会话和多线程方面遇到了一些困难 我想在这里完成的任务是让 Log4Net 将所有内容
  • 记录时何时出现致命错误?

    在 log4j 和 log4net 等日志框架中 您可以记录各种级别的信息 大多数级别都有明显的意图 例如 调试 日志与 错误 日志是什么 然而 我一直害怕的一件事是将我的日志记录归类为 致命 哪种类型的错误如此严重以至于应被归类为致命错误
  • 如何使 Log4Net 包装类成为单例类?

    我有一个 log4net 包装类 但是每次我从其他类调用它来记录错误时都需要实例化 我需要克服这个问题 最近我遇到了我不熟悉的单例类 因此我需要帮助将我当前的包装类转换为单例类 我正在发布我目前正在使用的 log4net 包装类 using
  • 工作天蓝色日志记录设置

    我尝试设置跟踪日志记录有一段时间了 但就是无法让它正常工作 关于这个主题有这么多错误 过时的文章并没有帮助 但请有人给我一个良好且实用的设置 用于 Azure 1 6 的跟踪日志记录和查看 我想要做的就是能够从我的应用程序捕获和查看跟踪消息

随机推荐

  • manjaro21折腾笔记

    1 换源以及更新 1 1 配置镜像源 span class token function sudo span pacman mirrors i c China m rank 输入后会出现源列表选项 xff0c 全选即可 1 2 设置源 打开
  • 最简nvim配置

    1 安装nvim span class token function sudo span span class token function apt get span span class token function install sp
  • 竟然可以在Windows下用Nvim写代码?2.nvim基础插件配置

    在windows下用nvim写代码 使用wsl和terminal简直不要太方便 保姆级教学 一篇就够了 一 下载plug 可以用指令安装 curl fLo config nvim autoload plug vim create dirs
  • vscode国内源下载

    https az764295 vo msecnd net stable ea3859d4ba2f3e577a159bc91e3074c5d85c0523 VSCodeUserSetup x64 1 52 1 exe 将官方下载地址的域名更换
  • linux下搜狗拼音隐藏悬浮状态栏

    打开配置文件 vim config sogoupinyin conf env ini 找到以下内容 并修改为0 StatusAppearance 61 0 重启fcitx状态栏就消失了 killall fcitx fcitx
  • JavaScript笔记(2)

    7 对象 xff1a 对象的三种声明与调用方法 span class token comment 第一种声明方法 span span class token keyword let span ObjectName span class to
  • C++类与对象笔记

    C 43 43 类与对象笔记 本章主要讲了面向对象三大特性 xff1a 封装 xff0c 继承 xff0c 多态 C 43 43 认为万事万物都皆为对象 xff0c 对象上有其属性和行为 例如 xff1a 人可以作为对象 xff0c 属性有
  • C++基础笔记

    C 43 43 基础笔记 本章主要讲了在c的基础上 xff0c c 43 43 的拓扑基础的部分 xff0c 还有内存的分配 1 内存分区模型 C 43 43 程序在执行时 xff0c 将内存大方向划分为4个区域 1 代码区 xff1a 存
  • linux文件名匹配(通配符使用)

    当在使用命令行时 xff0c 有很多时间都用来查找你所需要的文件 xff0c 如ls find等 S h e l l提供了一套完整的字符串模式匹配规则 xff0c 或者称之为元字符 xff0c 当s h e l l遇到上述字符时 xff0c
  • Android指纹识别,兼容Android 6.0 - Android 11

    目录 前言 概览 1 类 2 权限 详细介绍 1 BiometricManager 属性和方法 是否可用的状态码 方法 2 BiometricPrompt 属性和方法 验证的结果常用错误码 不全 方法 实战 第一步 引入支持库 第二步 检查
  • Lottie-Android详解

    Lottie是什么 Lottie是Airbnb开源的一套跨平台的 完整的动画效果解决方案 xff0c 适用于 Android iOS Web 和 Windows 平台 xff0c 它解析使用 Bodymovin 导出为 json 的 Ado
  • 组合问题,n个元素分成k组-5

    题目要求 P n k 代表将n个元素分成k个非空分组集合的总集 例如 xff0c 当L 61 1 2 3 P xff08 3 xff0c 2 xff09 61 12 3 13 2 1 23 我们就假设此n个元素是从1到n P 4 3 61
  • FTPClient踩过的坑

    一 ftpClient enterLocalPassiveMode public static final int PASSIVE LOCAL DATA CONNECTION MODE 61 2 官网关于该常量的说明 xff1a A con
  • Camera基本属性了解及设置

    将camera肯定是要有预览界面来配合着才有激情 xff0c 不然无图无真相 那就讲的没有太大的激情 我们对camera的使用一般是在app里面有用到设置获取图片的时候提供一个拍照功能 xff0c 一般是跳转到系统的拍照界面使用camera
  • 验证码不显示的解决方法

    方法一 xff1a 出现上面的情况 xff0c 最基本的一个错误就是你很可能在php里面忘记安装gd模块了 window环境下面只需要在php ini文件里面找到 把前面的分号去掉就可以了 xff0c 重启apache后 xff0c 你就可
  • 纯NumPy代码从头实现简单的卷积神经网络

    在某些情况下 xff0c 使用 ML DL 库中已经存在的模型可能会很便捷 但为了更好地控制和理解模型 xff0c 你应该自己去实现它们 本文展示了如何仅使用 NumPy 库来实现 CNN 卷积神经网络 xff08 CNN xff09 是分
  • 一文搞懂结构体变量占用多大内存空间(详细)

    一 首先做一道例题感受一下 请问下面定义的结构体变量aa在计算机内存中占用多少字节 xff1f span class token macro property span class token directive hash span spa
  • harbor+trivy的安装使用——筑梦之路

    环境依赖 xff1a docker ce docker compose 这些部分的安装这里就不再赘述 创建证书和私钥 mkdir opt harbor ssl p 生成CA证书私钥 ca key openssl genrsa out ca
  • Thinkphp 6.0响应输出和重定向

    本节课我们来学习一下响应操作 xff0c 响应输出和重定向 一 xff0e 响应操作 1 响应输出 xff0c 有好几种 xff1a 包括 return json 和 view 等等 xff1b 2 默认输出方式是以 html 格式输出 x
  • log4net配置经验教训

    第一点 xff1a 权限问题 xff0c 一定要给要写入日志文件的目录宽松的权限 本人就是因为权限问题浪费了很多时间 xff08 因为iis user 的权限是相对低的 xff0c log4net又需要创建文件 xff0c 所以权限一定要给