这可能不会回答你的问题,因为我不确定你想要达到的目标。也许如果你可以提供更多关于你为什么要这样做的细节,你可能会得到更好的答案。
如果你正试图关联已在不同地区生成多个日志文件(或其他来源),它可以帮助...
描述here你可以尝试的log4net的utctime
的PatternLayout。
这将使您的日志时间在世界时,这可能会更容易关联。如果你可以控制时间戳的来源(比如你的asp.net网站),那么通过将它们标准化为世界时,它们应该比较容易。
如果您确实想要将时间更改为不同的区域,或者在记录时从时间戳添加/减去任意时间范围,则可能需要编写自己的自定义PatternLayout或PatternLayoutConverter。这可能有点棘手,因为我认为log4net DatePatternConverter和UtcDatePatternConverter都不可用于定制(即它们被声明为internal
,因此您无法继承它们并添加您的行为)。
你可以用log4net的code repository从头开始编写自己的程序,但这对我来说似乎很麻烦。
还有一点需要注意,也许使用以下其中一个Custom Date format specifiers:z, zz, zzz,K再次在单独的列中记录时间会很有用。
更新: 查看this answer的另一个想法可能有所帮助。该问题要求采用log4net捕获用户名的方式。最终,对他来说最好的解决方案是编写一个非常小的类,它将返回他需要的信息(用户名)。该类的一个实例可以存储在MDC(或GlobalDiagnosticContext)中并在配置中引用。当log4net从MDC(即对象)获得值时,它会调用ToString并记录结果。与编写一个全新的PatternLayoutConverter相比,这种方法要简单得多,但要稍微灵活一些。
迈向答案的底部是一些示例代码:
public class HttpContextUserNameProvider
{
public override string ToString()
{
HttpContext context = HttpContext.Current;
if (context != null &&
context.User != null &&
context.User.Identity.IsAuthenticated)
{
return context.Identity.Name;
}
return "";
}
}
你将存储在MDC/GlobalDiagnosticContext的对象。像这样的属性:
MDC.Set("user", new HttpContextUserNameProvider());
你也许可以写一些类似的东西来返回不同的时间。您可以使用这段时间而不是log4net提供的时间,或者您可以将此“自定义”时间设置为额外的列。你的“自定义时间”的对象可能是这样的:
public class MyLocalTimeProvider
{
public override string ToString()
{
DateTime myLocalTime = GetUtcTimeInMyTimeZone(DateTime.UtcNow);
return myLocalTime;
}
}
然后,你可以像这样引用它:
MDC.Set("myLocalTime", new MyLocalTimeProvider());
我不知道你是否可以申请格式从MDC/GlobalDiagnosticContext项目。属性(我认为你可以)或不,但你可以试试看。
你总是可以使用硬编码格式或格式属性添加到这样的对象:
public class MyLocalTimeProvider
{
public MyLocalTimeProvider(string format)
{
Format = format;
}
public MyLocalTimeProvider()
: this ("G")
{
}
public string Format { get; set; }
public override string ToString()
{
DateTime myLocalTime = GetUtcTimeInMyTimeZone(DateTime.UtcNow);
return myLocalTime.ToString(Format);
}
}
你可以看看this article对于如何将UTC时间转换为任意的时区。
基本上,我的服务器在另一个时区。如果我的网站工作不正常,那么我必须检查它为什么不起作用? 要检查它, 1.我打我的网站 2.写命中时 3. DL日志文件(log4net的生成) 4.检查错误的macthing时间和类/函数 所以,我每次转换服务器记录时间到当地时间。这就是为什么我想使用我的时区记录数据。 – ByronBD 2011-04-12 07:40:14
@Byron - 我更新了我的答案。也许它会有所帮助,或者不会。祝你好运! – wageoghe 2011-04-13 13:56:09