如何在页眉/页脚中使用日期模式?

发布于 2024-08-10 06:35:48 字数 768 浏览 8 评论 0原文

这是我的 app.config 中的附加程序配置。这只是打印出文字字符串,而不是将其转换为日期(即,它按字面打印“[START: %date{MM/dd/yy HH:mm} ]”)。

<appender name="RollingLogFileAppender"
          type="log4net.Appender.RollingFileAppender">
  <file value="C:\somelog" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <datePattern value="-yyyy-MM-dd'.txt'" />
  <layout type="log4net.Layout.PatternLayout">
    <header value="[START:  %date{MM/dd/yy HH:mm} ]&#13;&#10;" />
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" />
    <footer value="[END]&#13;&#10;&#13;&#10;" />
  </layout>
</appender>

如何让它在标题中打印日期/时间?

Here's my appender configuration from my app.config. This just prints out the literal string instead of translating it to the date (i.e., it literally prints "[START: %date{MM/dd/yy HH:mm} ]").

<appender name="RollingLogFileAppender"
          type="log4net.Appender.RollingFileAppender">
  <file value="C:\somelog" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <datePattern value="-yyyy-MM-dd'.txt'" />
  <layout type="log4net.Layout.PatternLayout">
    <header value="[START:  %date{MM/dd/yy HH:mm} ]
" />
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" />
    <footer value="[END]

" />
  </layout>
</appender>

How can I get this to print the date/time in the header?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夏花。依旧 2024-08-17 06:35:49

实现此目的的一个简单方法是子类化 log4net.Layout.PatternLayout 并覆盖页眉和页脚。然后,您可以在标题中添加您想要的任何内容:日期戳、机器名称、用户名、程序集版本或您想要的任何内容:

using System;
using log4net.Layout;

namespace MyAssembly
{
    class MyPatternLayout : PatternLayout
    {
        public override string Header
        {
            get
            {
                var dateString = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                return string.Format("[START:  {0} ]\r\n", dateString);
            }
        }
    }
}

<layout type="MyAssembly.MyPatternLayout">
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" />
</layout>

在程序集中包含这个新类,并在文件中使用新类型,如下所示 您覆盖了页眉和页脚,甚至不需要在此处添加它。每次应用程序启动以及每次文件滚动时都会添加标头。

An easy way to do this is to subclass log4net.Layout.PatternLayout and override Header and Footer. Then you can add whatever you want to your Header: date stamp, machine name, user name, assembly version, or whatever your heart desires:

using System;
using log4net.Layout;

namespace MyAssembly
{
    class MyPatternLayout : PatternLayout
    {
        public override string Header
        {
            get
            {
                var dateString = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                return string.Format("[START:  {0} ]\r\n", dateString);
            }
        }
    }
}

Include this new class in your assembly, and use the new type in your file, like this:

<layout type="MyAssembly.MyPatternLayout">
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" />
</layout>

Since you overrode Header and Footer, you don't even need to add it here. The Header will be added every time your application starts, and every time the file rolls over.

德意的啸 2024-08-17 06:35:49

基于 @Wizou 评论。请参阅 DynamicPatternLayout 类 文档。

我实际上是利用这种行为差异来确定开始和结束时间

PatternLayout 和 DynamicPatternLayout 之间的一个重要区别是配置中页眉和页脚参数的处理。 DynamicPatternLayout 的 Header 和 Footer 参数在语法上必须采用 PatternString 的形式,但不应标记为 log4net.Util.PatternString 类型。这样做会导致模式在配置时静态转换,并导致 DynamicPatternLayout 执行与 PatternLayout 相同的操作。

将 Header 上的类型设置为 PatternString 但将 Footer 保留为动态


<布局类型=“log4net.Layout.DynamicPatternLayout”>/>

Building on @Wizou's comment. See the DynamicPatternLayout Class documentation.

I'm actually using this difference in behaviour to have a start and end time

One important difference between PatternLayout and DynamicPatternLayout is the treatment of the Header and Footer parameters in the configuration. The Header and Footer parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, but should not be marked as type log4net.Util.PatternString. Doing so causes the pattern to be statically converted at configuration time and causes DynamicPatternLayout to perform the same as PatternLayout.

Setting the type on Header to PatternString but leaving Footer as dynamic


<layout type="log4net.Layout.DynamicPatternLayout">
<param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" type="log4net.Util.PatternString" />
<param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" />
</layout>

花开半夏魅人心 2024-08-17 06:35:49

我遇到了这个问题,我使用的快速解决方法是仅使用固定的页眉和页脚。然后在获得 ILog 对象后立即执行此操作:

log.Info(string.Format("[START: {0} ]\r\n", dateString))

因此,就在标题下将获得您想要的信息。

例如

===Start===
[START:  2012-02-23 12:12:12 ]

logs...

I encountered this problem and a quick workaround I used is to just use a fixed header and footer. Then do this as soon as you have the ILog object:

log.Info(string.Format("[START: {0} ]\r\n", dateString))

So just under the header you will get the information you desire.

E.g

===Start===
[START:  2012-02-23 12:12:12 ]

logs...
糖粟与秋泊 2024-08-17 06:35:48

来自此处的答案

<layout type="log4net.Layout.DynamicPatternLayout">
  ...
  <header value="[BEGIN LOGGING AT %date]%newline"/>
  <footer value="[END LOGGING AT %date]%newline"/>
  ...
</layout>

对我来说就像魅力一样。无需编写一段代码。

另外在我们通常使用的项目中:

<header type="log4net.Util.PatternString" value="Our Application Name version %property{Assembly.Version}, .NET version %property{Runtime.Version}, %date ***%newline"/>

看看PatternString 也有文档。

我还注意到,在您编写第一个日志语句之前,日志文件不会出现。

Answer from here.

<layout type="log4net.Layout.DynamicPatternLayout">
  ...
  <header value="[BEGIN LOGGING AT %date]%newline"/>
  <footer value="[END LOGGING AT %date]%newline"/>
  ...
</layout>

Works for me like a charm. No need to write a piece of code.

Also in projects we usually use:

<header type="log4net.Util.PatternString" value="Our Application Name version %property{Assembly.Version}, .NET version %property{Runtime.Version}, %date ***%newline"/>

Take a look at PatternString doc also.

Also I've noticed that log file won't appear until you write first log statement.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文