gpt4 book ai didi

.net - 当我在附加程序中命名文件时,Log4Net 找不到 %username 属性

转载 作者:行者123 更新时间:2023-12-02 06:02:26 26 4
gpt4 key购买 nike

log4net 没有对我的登录名进行正确的 PatternString 替换。我希望我的日志是

Logs\YYYYMMDD\MSMQcore_[username].log

当我使用 %username 属性时,我在路径中获取域,这会在其中添加另一个文件夹间接寻址。我只想要用户名。

Logs\YYYYMMDD\MSMQcore_[domain]\[username].log

有人有在附加程序的文件名中插入“用户名”的示例吗?我尝试了很多方法,但仍然摸不着头脑。

<appender name="core_Appender" type="log4net.Appender.RollingFileAppender" >
<!-- <file type="log4net.Util.PatternString" value="Logs/%date{yyyyMMdd}/MSMQcore_%identity.log" /> -->
<!-- <file type="log4net.Util.PatternString" value="Logs/%date{yyyyMMdd}/MSMQcore_%property{user}.log" /> -->
<file type="log4net.Util.PatternString" value="Logs/%date{yyyyMMdd}/MSMQcore_%username.log" />
</appender>

最佳答案

使用环境变量模式对我有用:

<file type="log4net.Util.PatternString" value="Logs\\%env{USERNAME}.txt" />

更新:如果 USERNAME 环境变量不是一个选项,则可以选择子类化 PatternString。这是一个简单的实现:

public class MyPatternString : PatternString
{
public MyPatternString()
{
AddConverter("usernameonly", typeof(UserNameOnlyConverter));
}
}

public class UserNameOnlyConverter : PatternConverter
{
override protected void Convert(TextWriter writer, object state)
{
var windowsIdentity = WindowsIdentity.GetCurrent();
if (windowsIdentity != null && windowsIdentity.Name != null)
{
var name = windowsIdentity.Name.Split('\\')[1];
writer.Write(name);
}
}
}

新设置将如下所示:

<file type="MyPatternString" value="Logs\\%usernameonly.txt" />
<小时/>

更新 2:回答为什么 %identity 和 %property{user} 不起作用:

%identity 模式获取当前线程上的标识属性。在我的测试中,此属性为空,并且可能如此,直到为正在运行的线程分配特定的 Windows 标识为止。这在追加器的上下文中不起作用,因为您不知道哪个线程将执行实际的追加。

%property 模式从 GlobalContext 和 ThreadContext 类中获取属性。默认情况下,只有 log4net:HostName (LoggingEvent.HostNameProperty) 会在 GlobalContext 中注册。因此,除非您在这些上下文中主动注册属性,否则无法将它们与 %property 模式一起使用。同样,ThreadContext 在附加程序的上下文中毫无用处,因为您无法知道哪个线程将执行附加操作。

也就是说,在 GlobalContext.Properties 集合中(也许在应用程序启动例程中的某个位置)注册一个名为 username 的属性,将使 %property{username} 按预期工作。

关于.net - 当我在附加程序中命名文件时,Log4Net 找不到 %username 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1563667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com