是否有我可以用來命名我的日誌文件的變量?如何用程序集名稱命名log4net輸出文件?
<file value="${ALLUSERSPROFILE}\${AssemblyName}.log.xml" />
凡
${ALLUSERSPROFILE}
真正起作用${AssemblyName}
沒有,這是什麼我做了,只是爲了我想要的插圖。
是否有我可以用來命名我的日誌文件的變量?如何用程序集名稱命名log4net輸出文件?
<file value="${ALLUSERSPROFILE}\${AssemblyName}.log.xml" />
凡
${ALLUSERSPROFILE}
真正起作用${AssemblyName}
沒有,這是什麼我做了,只是爲了我想要的插圖。不是默認情況下。
此語法用於擴展Windows Environment Variables。雖然ALLUSERSPROFILE
是一個標準的環境變量,但AssemblyName
不是。你將不得不自己設置AssemblyName
,作爲一個動態解決方案,這不是一件容易的事情。
NLog中的processname類似於log4net中的PatternLayout;它們都是日誌本身佈局/渲染的一部分。
如果您想要在應用程序中使用環境變量,請強制將創建作爲安裝的一部分或在代碼中創建自己的環境變量;一個C#示例是here。
如果該選項不適合您的需求,那麼您可以動態設置路徑,如here所示。
你可以編寫自己的模式佈局轉換器。我張貼的樣本here,我認爲這是很容易修改,以便它寫入組件名稱...
另一種選擇是,以定義在初始化時一個全局屬性:
GlobalContext.Properties["pid"] = System.Diagnostics.Process.GetCurrentProcess().Id;
this.logger = log4net.GetLogger("LoggerSample");
在你配置文件,你可以使用像這樣的「pid」屬性:
<param name="ConversionPattern" value="%d;%property{log4net:HostName};%property{pid};%t;%p;%c;%M;%L;%m%n" />
希望,我很清楚!
BR ++ mabra
正如其他人所說,有對的AssemblyName和一對夫婦的方式來實現,無論如何它沒有內置的佔位符。另一個是將您自己的處理程序/轉換器註冊到Log4Net框架。
基本上,你的做法與log4net.Util.PatternString類在內部做的一樣(你可以檢查相關的源代碼以獲得比下面給出的更多的完整「示例」)。
實施例:
<file value="[ASSEMBLYNAME].log" type="MyExpressionHandler, MyAssembly"/>
然後代碼:
輸入代碼在這裏
using log4net.Core;
public sealed class MyExpressionHandler : IOptionHandler
{
private string m_str;
public MyExpressionHandler(string str)
{
m_str = str;
}
public void ActivateOptions()
{
}
public string Format()
{
return m_str.Replace("[ASSEMBLYNAME]", /* ... whatever ... */);
}
}
然後提供匹配的 「轉換器類」。
internal class MyExpressionHandlerConverter : IConvertTo, IConvertFrom
{
public bool CanConvertTo(Type targetType)
{
return (typeof(string).IsAssignableFrom(targetType));
}
public object ConvertTo(object source, Type targetType)
{
MyExpression patternString = source as MyExpression;
if (patternString != null && CanConvertTo(targetType))
{
return patternString.Format();
}
throw ConversionNotSupportedException.Create(targetType, source);
}
public bool CanConvertFrom(System.Type sourceType)
{
return (sourceType == typeof(string));
}
public object ConvertFrom(object source)
{
string str = source as string;
if (str != null)
{
return new MyExpression(str);
}
throw ConversionNotSupportedException.Create(typeof(MyExpression), source);
}
}
,最終使你的轉換器已知log4net的框架:
ConverterRegistry.AddConverter(typeof(MyExpression), typeof(MyExpressionConverter));
NLOG具有可變相似,我想:'$ {processname}` – 2011-01-13 18:12:12