标签: log4net-configuration

在Log4Net消息到达附加程序之前对其进行编辑

我有一个安全工具,可以通过电子邮件向用户发送新密码。当阈值为VERBOSE时,生产电子邮件模块(我不拥有并且不想更改)将使用Log4Net记录整个html电子邮件正文。由于电子邮件包含明文形式的域用户密码,因此,我想在日志消息到达附加程序之前从日志消息中删除该密码。

有没有一种方法可以将对象临时插入Log4Net堆栈中,从而允许我搜索LoggingEvent消息并对其进行更改以掩盖我找到的所有密码?我想插入对象,调用电子邮件模块,然后删除对象。

c# logging log4net appender log4net-configuration

3
推荐指数
1
解决办法
4886
查看次数

使用多个log4net文件记录器

我有文件appenders FileA,FileB和FileC.FileA我添加到根元素,因为我希望它是一个全部捕获,(更多内容见下文).FileB和FileC我用于特定的消息,并为每个appender创建命名记录器.在代码中,我加载了我用于大多数消息的日志,如下所示:

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)

其他记录器,我这样加载

private static readonly log4net.ILog commandLog = log4net.LogManager.GetLogger("LoggerFileB");
Run Code Online (Sandbox Code Playgroud)

发生的事情是我得到了我对LoggerFileB的期望,即只有特殊的消息.问题是这些消息也出现在LoggerFileA中,这是我添加到root的全部.我可以为catch-all创建一个特定的命名实例,而不是将其添加到根元素,但我希望调用类型作为输出中的记录器名称.创建命名记录器意味着%logger输出日志的名称而不是类型.有没有办法准确地得到我想要的东西(显示记录器名称作为类型,但不显示记录到其他命名记录器的消息)?希望我错过了一些东西,并且有一个简单的解决方案.

这是我的log.config在这种情况下的样子.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <log4net>
        <appender name="FileA" type="log4net.Appender.RollingFileAppender">
            <file value="FileA.txt" />
            ...snip...
        </appender>
        <appender name="FileB" type="log4net.Appender.RollingFileAppender">
            <file value="FileB.txt" />
            ...snip...
        </appender>
        <appender name="FileC" type="log4net.Appender.RollingFileAppender">
            <file value="FileC.txt" />
            ...snip...
        </appender>
        <root>
            <level value="ALL" />
            <appender-ref ref="LoggerFileA" />
        </root>
        <logger name="LoggerFileB">
            <level value="ALL" />
            <appender-ref ref="FileB" />
        </logger>
        <logger name="LoggerFileC">
            <level value="ALL" />
            <appender-ref ref="FileC" />
        </logger>
    </log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)

log4net log4net-configuration

3
推荐指数
1
解决办法
5251
查看次数

Log4Net - 使用日志记录日期时间添加时间

我开发了一个asp.net网站,我使用log4net以格式记录错误信息:

"%-5p %d - %m%n"
Run Code Online (Sandbox Code Playgroud)

它按当前机器的日期时间记录日期时间.例如:

FATAL 2011-04-10 01:08:11,759 - message
Run Code Online (Sandbox Code Playgroud)

但是我想将datetime转换为另一个区域或者用它来增加额外的时间.例如,我想在上一个示例中添加3个小时,并希望输出为:

FATAL 2011-04-10 **04**:08:11,759 - message
Run Code Online (Sandbox Code Playgroud)

有关如何实现这一点的任何想法?

log4net datetime log4net-configuration

3
推荐指数
1
解决办法
5646
查看次数

Log4Net:何时获取并释放文件句柄?

我是一个Log4Net新手,试图基本/安全地了解它是如何工作的.如果我将Logger配置为FileAppender,并且我有多个语句,如下所示,一个接一个:

this.GetLogger().Info("...");
this.GetLogger().Error("....");
Run Code Online (Sandbox Code Playgroud)

每个调用是否实际打开文件,写入字符串并关闭它?每次?或者还有其他什么吗?我想知道何时使用文件资源.它是如何工作的?

log4net log4net-configuration log4net-appender

3
推荐指数
1
解决办法
2504
查看次数

log4net没有登录到数据库

我有一个奇怪的问题,我的log4net设置没有记录任何数据到数据库,也没有引发任何异常来通知问题.我已在一个名为"Log4net.Config"的单独文件中定义了配置设置,并在程序集中引用了它.(请注意,我通过nuget lib安装了Log4net lib)

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
Run Code Online (Sandbox Code Playgroud)

这是日志文件.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="Data Source=(local);Initial Catalog=testdb;Integrated Security=True" />
      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout"> …
Run Code Online (Sandbox Code Playgroud)

.net log4net log4net-configuration

3
推荐指数
1
解决办法
2722
查看次数

在运行时更改 log4net 文件名而不更改附加程序

我想在运行时更改我的日志名称而不更改附加程序。基本上,一旦到了一天中的某个设定时间,我希望能够使用不同的文件。

这是我的 appender 的样子:

<appender name="info" type="log4net.Appender.RollingFileAppender">
   <file value="logs\" />
   <datePattern value="yyyyMMdd'_INFO.log'" />
   <staticLogFileName value="false" />
   <appendToFile value="true" />
   <rollingStyle value="Composite" />
   <maxSizeRollBackups value="10" />
   <maximumFileSize value="10MB" />
   <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%newline[%date]-%level-%logger[%M]- Linea:%L - %message%newline"/>
   </layout>
   <filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="INFO"/>
     <param name="LevelMax" value="INFO"/>
   </filter>
 </appender>
Run Code Online (Sandbox Code Playgroud)

这是我遍历 appender 的函数:

   public void SetLogFile(string fileName)
   {
       foreach (var appender in log.Logger.Repository.GetAppenders())
       {
           try
           {
               ((log4net.Appender.FileAppender)appender).File = fileName;
               ((log4net.Appender.FileAppender)appender).ActivateOptions();
           }
           catch (Exception ex)
           {
               Console.WriteLine(ex.Message);
           }
       }
   }

   SetLogFile("log1.txt");
Run Code Online (Sandbox Code Playgroud)

它为此特定示例创建以下文件:

log1.txt20171221_INFO.log

我希望我的日志文件被命名,log1.txt …

.net c# log4net log4net-configuration log4net-appender

3
推荐指数
1
解决办法
2116
查看次数

如何在 UWP 应用中通过 log4net 配置日志记录

我有一个使用我的一些库的 UWP 应用程序。此类库使用 log4net 进行日志记录,并在多个项目中共享,而不仅仅是 UWP。

我想通过 XML 配置文件中的常用 confi 部分配置 log4net,但我找不到在 UWP 项目中执行此操作的方法,因为没有 app.config 文件。

我应该把下面的部分放在哪里?

<log4net>
    <appender name="Console" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date - %message%newline" />
        </layout>
    </appender>

    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
        <file value="log\mylog.log" />
        <appendToFile value="true" />
        <maximumFileSize value="2000KB" />
        <maxSizeRollBackups value="20" />

        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date - %message%newline" />
        </layout>
    </appender>

    <root>
        <level value="INFO" />
        <appender-ref ref="Console" />
        <appender-ref ref="RollingFile" />
    </root>
</log4net>
Run Code Online (Sandbox Code Playgroud)

谢谢!

c# logging log4net log4net-configuration uwp

3
推荐指数
1
解决办法
1176
查看次数

如何将processid添加到log4net布局?

我将log4net在我的wpf申请中使用.我需要在我的日志中的消息如下所示:

11/8/2018 10:49:38 AM   13 (5368)       properties disabled.
Run Code Online (Sandbox Code Playgroud)

其中13processId其中写入该消息.所以这很容易.但不幸的是我无法做到这一点.所以我只需要一个适合我的log4net记录器的模式布局.

我在官方网站的faq部分找到了以下消息log4net:

以下示例FileAppender通过%processid在File属性中指定模式来设置a的文件名以包括当前进程ID .

<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
    <file type="log4net.Util.PatternString" value="log-file-[%processid].txt" />
    <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
</appender>
Run Code Online (Sandbox Code Playgroud)

所以,它的工作原理,但仅适用于我的日志文件中的文件名而不是布局.我需要把它%processid放到我的布局中.我目前的布局是:

<layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date{dd/MM/yyyy HH:mm:ss,fff tt} %processid (%thread) - %message%newline" />
</layout>
Run Code Online (Sandbox Code Playgroud)

我的日志只是将processid字符串写入我的日志文件.

22/11/2018 16:21:51,863 PM processid (1) - Exiting application.
Run Code Online (Sandbox Code Playgroud)

我也找到答案.它有效.但是%processid在启动期间,属性仅初始化一次.在我的应用程序中,编写程序通常会发生变化 …

.net c# logging log4net log4net-configuration

3
推荐指数
1
解决办法
378
查看次数

通过XML文件*和*代码配置log4net appender

我今天开始玩log4net,到目前为止,我真的很喜欢它.为了保留我们当前的日志记录功能,应用程序需要在应用程序启动时创建新的日志文件.日志文件名具有编码在其中的日期和时间戳.目前,我已经通过一个配置了log4net XmlConfigurator,这很好用,除了我的文件名RollingFileAppender在配置XML文件中是硬编码的.

我想继续使用XmlConfigurator,但是在调用之后Configure(),我希望得到RollingFileAppender和,在代码中,将其文件值更改为动态生成的字符串.网上的示例文档现在似乎已经关闭了,但是我已经深入研究了SDK参考,看起来我可以使用HeirarchyGetAppenders()做我需要做的事情.我是在正确的轨道上吗?

好的,我对此进行了尝试并尝试了以下代码,但这些代码无效:

private static readonly ILog _log = LogManager.GetLogger(typeof(GUI));
// in the config file, I've set the filename to example.log, and it works
XmlConfigurator.Configure(new FileInfo("log_config.xml"));
Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
if(hierarchy != null) {
    // get the appenders
    IAppender[] appenders = hierarchy.GetAppenders();
    // change the filename for the RollingFileAppender
    foreach( IAppender a in appenders) {
        RollingFileAppender rfa = a as …
Run Code Online (Sandbox Code Playgroud)

log4net rollingfileappender appender log4net-configuration

2
推荐指数
1
解决办法
3291
查看次数

Log4Net没有记录(可能没有初始化)

第一次玩Log4Net,我遇到了麻烦.我已经按照各种教程进行了操作,但我无法将其记录下来.让我告诉你我的代码,希望你能告诉我我做错了什么.

的app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" 
             type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>  
  <log4net>    
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="CurrentLog.txt"/>
      <staticLogFileName value="true"/>
      <appendToFile value="true"/>
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd"/>
      <filter type="log4net.Filter.LevelRangeFilter">
        <acceptOnMatch value="true" />
        <levelMin value="DEBUG" />
        <levelMax value="FATAL" />
      </filter>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{dd MMM yyy HH:mm:ss} %level %message. %newline %exception" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)

AssemblyInfo.cs中

[assembly: log4net.Config.XmlConfigurator(Watch=true)]
Run Code Online (Sandbox Code Playgroud)

Presenter.cs

在课程的顶部我有这个:

private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)

然后我尝试在类的后面使用log变量:

bool isDebugEnabled …
Run Code Online (Sandbox Code Playgroud)

c# logging log4net log4net-configuration

2
推荐指数
1
解决办法
2万
查看次数