标签: log4net-appender

在log4net日志中,页眉和页脚的出现次数增加了两倍

下面是来自app.config的log4net部分

   <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,     log4net" />
   </configSections>      
   <log4net debug="true">
     <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <file type="log4net.Util.PatternString" value="${TMP}\SRG\Logs\Log_%env{USERNAME}_%date{yyyyMMdd}.log" />
      <appendToFile value="true" />
      <bufferSize value="20" />
      <LockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <layout type="log4net.Layout.PatternLayout">
      <header type="log4net.Util.PatternString" value="[Log Starts]%newline" />        
      <footer type="log4net.Util.PatternString" value="[Log Ends]%newline" />        
      <conversionPattern value="%date [%username] - %message%newline" />
      </layout>
     </appender>  

     <logger name="SRGApplicationDebugLog">
      <level value="DEBUG" />
      <appender-ref ref="LogFileAppender" />
     </logger>
   </log4net>  
Run Code Online (Sandbox Code Playgroud)

问题1:每当我的应用程序启动时,我都会额外获得页眉和页脚两次,但我需要避免它.

[日志开始]
[日志结束]
[日志开始]
[日志结束]
[日志开始]
2012-11-08 12:25:03,376 [用户名] - 应用程序已启动
[日志结束]

问题2:我没有从两个空的页眉页脚对来到哪里.

  1. 我正在创建如下的记录器:
_debugLogger = LogManager.GetLogger("SRGApplicationDebugLog");    
XmlConfigurator.Configure(); 
Run Code Online (Sandbox Code Playgroud)
  1. 要使用Logger: …

.net c# log4net log4net-appender

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

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 网站中提供的文档,但是我有这些问题。

这是Log4Net网站上的示例程序中显示的最简单的输出BasicConfigurator.Configure()

0    [main] INFO  MyApp        - Entering application.
36   [main] DEBUG Com.Foo.Bar  - Did it again!
51   [main] INFO  MyApp        - Exiting application.
Run Code Online (Sandbox Code Playgroud)

我的程序已经有一个窗格(在调试模式下)来显示程序的流程,该流程在多次异步尝试中循环。所以当我运行它时,我可以看到程序的流程(典型的批量调试方法)。

在这个级别,据我所知,通过使用 Log4Net,我可以收集那些时刻的日志,这些日志可以附加到许多不同的输出方法中,例如控制台外部文件、数据库等。这导致代码加倍. 在每个测试点中,一行用于将日志输出到 UI,另一行用于 Log4Net 的日志记录。

是否有任何方法可以将其中一个附加程序的内容(例如上面显示的附加程序)输出到字符串或类似类型的变量,以便能够在运行时显示它?

我不确定如何在 WPF 应用程序中看到控制台的输出。将Log4Net输出到文件中,然后将它的竞赛打印回字符串似乎很有趣。


更新

Show output from:下拉菜单设置为“Debug”时,Console Appender可以在Visual Studio输出窗口中看到 的输出。非常感谢@Aron 指出。

c# wpf log4net log4net-appender

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

在运行时更改 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
查看次数

Log4Net,如何在我的日志记录中添加自定义字段(变量)

我指的是优秀的帖子:

Log4Net,如何在我的日志记录中添加自定义字段

但它并没有给我整个解决方案.

记录像"这是一个测试"这样的字符串没问题,但如果我想记录一个变量,它就响应(null).

这是我的剪切代码无法正常工作:

log4net.GlobalContext.Properties["versionid"] = Variables.IDVERSION;
Run Code Online (Sandbox Code Playgroud)

这是我工作的剪切代码:

log4net.GlobalContext.Properties["versionid"] = " This is a test";
Run Code Online (Sandbox Code Playgroud)

虽然,IDVERSION是我的代码c#中系统更新的公共属性.

有谁有想法如何解决这个问题?我想我已接近解决方案了.

c# log4net log4net-appender

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

Log4Net AdoNetAppender - 格式化日志日期以获取包含的秒数

我的问题是我的数据库日志不显示秒(默认格式似乎是“yyyy-MM-dd hh:mm:00”。有什么方法可以改变这一点并至少获得几秒钟的东西(毫秒将是一个加号) )?

这是我的附加程序配置:

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="1" />
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <connectionString value="data source=MyDB;initial catalog=LogSpace;integrated security=True;persist security info=True;Application Name=&quot;MyApp &quot;" />
  <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">
      <conversionPattern value="%thread" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@log_level" />
    <dbType value="String" />
    <size value="50" />
    <layout type="log4net.Layout.PatternLayout"> …
Run Code Online (Sandbox Code Playgroud)

log4net log4net-configuration log4net-appender

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

log4net Azure Blob Appender

将日志保存到 Azure Blob 存储时,是否可以每天创建不同的文件夹?现在我正在使用这个配置,它工作正常

<appender name="AzureAppender2" type="log4net.Appender.AzureBlobAppender, log4net.Appender.Azure">
     <param name="ContainerName" value="testcon" />
     <param name="DirectoryName" value="myfolder/logs.txt" />
     <param name="ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=testcon;AccountKey="rftgdfgdfgfdg78=="/>
     <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

我已经试过了

<param name="DirectoryName" value=%date/" />
Run Code Online (Sandbox Code Playgroud)

但它不起作用

我想要的是能够每天动态使用不同的文件夹:比如

目录名称 = 2016-05-13

目录名称 = 2016-05-12

目录名称 = 2016-05-11

这是可以实现的吗?

谢谢

log4net azure log4net-configuration log4net-appender azure-blob-storage

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

将变量添加到 Log4Net 中滚动文件附加程序的文件名

有没有办法使 fileAppender 变量的名称?即当我在我的控制器上调用一个带有对象的操作时,我想将其写入日志文件。该文件的名称类似于:yyyyMMdd_hhmssms_[controller]_[method].json

这是我的配置文件中的内容:

<appender name="JsonFileAppender" type="log4net.Appender.RollingFileAppender" >
  <file value="c:\temp\" />
  <datePattern value="yyyyMMdd_hh.mm.ss.ms_%thread{CommonApplicationData}'.json'" />
  <staticLogFileName value="false" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="5MB" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%message%newline" />
  </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

这将返回以下文件名:20160224_01.30.28.3028_P1rea24{Co30onApplicPionDaPa}.json

c# logging log4net log4net-appender

0
推荐指数
1
解决办法
2018
查看次数

如果服务从许多天开始连续运行,如何每天创建新的log4net

我已经log4net在Windows服务中实现了它,并且按预期工作,并根据配置设置使用当前日期创建了新文件。

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" />
  </configSections>
  <log4net>
    <appender name="file" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="Logs\log-%utcdate{yyyy-MM-dd}.txt" />
      <staticLogFileName value="false" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <maxSizeRollBackups value="5" />
      <maximumFileSize value="5MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
      <param name="DatePattern" value="dd.MM.yyyy'.log'" />
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="file" />
    </root>
  </log4net>  
Run Code Online (Sandbox Code Playgroud)

这里的问题是,如果我的服务从最近2天开始运行,那么它将不会使用当前日期创建新文件,它会保留2天旧文件的引用并将日志添加到旧文件中,而不是在那一天创建新文件。
记录器代码就像

public static class Logger
    {
        public static log4net.ILog Log { get; set; }

        static Logger()
        {
            Log = …
Run Code Online (Sandbox Code Playgroud)

c# log4net log4net-appender

0
推荐指数
1
解决办法
716
查看次数