C# 从方法中向字符串中间添加其他内容
我正在处理一个日志文件,我有一个方法,在日志中创建一个通用条目。通用日志条目如下所示:C# 从方法中向字符串中间添加其他内容,c#,oop,C#,Oop,我正在处理一个日志文件,我有一个方法,在日志中创建一个通用条目。通用日志条目如下所示: public StringBuilder GetLogMessage(LogEventType logType, object message) { StringBuilder logEntry = new StringBuilder(); logEntry.AppendFormat("DATE={0} ", DateTime.Now.ToString("dd-MMM-yyyy
public StringBuilder GetLogMessage(LogEventType logType, object message)
{
StringBuilder logEntry = new StringBuilder();
logEntry.AppendFormat("DATE={0} ", DateTime.Now.ToString("dd-MMM-yyyy", new CultureInfo(CommonConfig.EnglishCultureCode)));
logEntry.AppendFormat("TIME={0} ", DateTime.Now.ToString("HH:mm:ss", new CultureInfo(CommonConfig.EnglishCultureCode)));
logEntry.AppendFormat("ERRORNO={0} ", base.RemoteIPAddress.ToString().Replace(".", string.Empty));
logEntry.AppendFormat("IP={0}", base.RemoteIPAddress.ToString());
logEntry.AppendFormat("LANG={0} ", base.Culture.TwoLetterISOLanguageName);
logEntry.AppendFormat("PNR={0} ", this.RecordLocator);
logEntry.AppendFormat("AGENT={0} ", base.UserAgent);
logEntry.AppendFormat("REF={0} ", base.Referrer);
logEntry.AppendFormat("SID={0} ", base.CurrentContext.Session.SessionID);
logEntry.AppendFormat("LOGTYPE={0} ", logType.ToString() );
logEntry.AppendFormat("MESSAGE={0} ", message);
return logEntry;
}
在“MESSAGE=”之前添加其他参数的最佳方法是什么?例如,如果我想在运行GetLogMessage时从派生类添加“MODULE=”。委托是我正在寻找的,还是将该方法标记为虚拟并重写它,还是我需要完全不同的东西
任何帮助都将不胜感激。如果您只想附加一些与重写虚拟方法(并在开始时调用基本实现)的子类相关的信息,这是最合适的解决方案;)
HTH.假设日志消息始终具有相同的格式,您可以添加一个虚拟方法,子类可以实现该方法来向消息添加自己的详细信息:
public StringBuilder GetLogMessage(LogEventType logType, object message)
{
StringBuilder logEntry = new StringBuilder();
logEntry.AppendFormat("DATE={0} ", DateTime.Now.ToString("dd-MMM-yyyy", new CultureInfo(CommonConfig.EnglishCultureCode)));
//...
this.AddMessageDetail(logEntry);
logEntry.AppendFormat("MESSAGE={0} ", message);
return logEntry;
}
protected virtual void AddMessageDetail(StringBuilder logMessage)
{
}
但是,如果子类需要更改消息的结构,则会出现这种情况。这种方法如何:
public StringBuilder GetLogMessage(LogEventType logType, object message)
{
return GetLogMessage(logType, message, null);
}
public StringBuilder GetLogMessage(LogEventType logType, object message, Dictionary<string,string> extraParameters)
{
StringBuilder logEntry = new StringBuilder();
logEntry.AppendFormat("DATE={0} ", DateTime.Now.ToString("dd-MMM-yyyy", new CultureInfo(CommonConfig.EnglishCultureCode)));
logEntry.AppendFormat("TIME={0} ", DateTime.Now.ToString("HH:mm:ss", new CultureInfo(CommonConfig.EnglishCultureCode)));
logEntry.AppendFormat("ERRORNO={0} ", base.RemoteIPAddress.ToString().Replace(".", string.Empty));
logEntry.AppendFormat("IP={0}", base.RemoteIPAddress.ToString());
logEntry.AppendFormat("LANG={0} ", base.Culture.TwoLetterISOLanguageName);
logEntry.AppendFormat("PNR={0} ", this.RecordLocator);
logEntry.AppendFormat("AGENT={0} ", base.UserAgent);
logEntry.AppendFormat("REF={0} ", base.Referrer);
logEntry.AppendFormat("SID={0} ", base.CurrentContext.Session.SessionID);
logEntry.AppendFormat("LOGTYPE={0} ", logType.ToString() );
if(extraParameters != null)
{
foreach(var s in extraParameters.Keys)
{
logEntry.AppendFormat("{0}={1} ", s, extraParameters[s] );
}
}
logEntry.AppendFormat("MESSAGE={0} ", message);
return logEntry;
}
公共StringBuilder GetLogMessage(LogEventType logType,对象消息)
{
返回GetLogMessage(日志类型,消息,空);
}
公共StringBuilder GetLogMessage(LogEventType logType、对象消息、字典外部参数)
{
StringBuilder logEntry=新建StringBuilder();
logEntry.AppendFormat(“DATE={0}”,DateTime.Now.ToString(“dd-MMM-yyyy”,new-CultureInfo(CommonConfig.EnglishCultureCode));
logEntry.AppendFormat(“TIME={0}”,DateTime.Now.ToString(“HH:mm:ss,newCultureInfo(CommonConfig.EnglishCultureCode)));
AppendFormat(“ERRORNO={0}”,base.RemoteIPAddress.ToString().Replace(“.”,string.Empty));
AppendFormat(“IP={0}”,base.RemoteIPAddress.ToString());
AppendFormat(“LANG={0}”,base.Culture.TwoLetterIsLanguageName);
AppendFormat(“PNR={0}”,this.RecordLocator);
AppendFormat(“AGENT={0}”,base.UserAgent);
AppendFormat(“REF={0}”,base.referer);
AppendFormat(“SID={0}”,base.CurrentContext.Session.SessionID);
AppendFormat(“LOGTYPE={0}”,LOGTYPE.ToString());
if(extraParameters!=null)
{
foreach(extraParameters.Keys中的var s)
{
AppendFormat(“{0}={1}”,s,extraParameters[s]);
}
}
AppendFormat(“MESSAGE={0}”,MESSAGE);
返回日志条目;
}
谢谢Thomas,我怎样才能在StringBuilder中输入“MESSAGE={0}”之前和“LOGTYPE={0}”之后的条目?我是否需要将其转换为字符串并查找子字符串?+1我更喜欢你的答案,因为它现在允许添加多个自定义消息,而不需要我编写的方法(假设OP没有标准的日志消息格式)。我非常喜欢这种方法。允许更好地维护消息格式。非常感谢。这是一个非常有趣的方法,李,非常感谢你的反馈。这将是有用的另一部分,我写的!
public StringBuilder GetLogMessage(LogEventType logType, object message)
{
return GetLogMessage(logType, message, null);
}
public StringBuilder GetLogMessage(LogEventType logType, object message, Dictionary<string,string> extraParameters)
{
StringBuilder logEntry = new StringBuilder();
logEntry.AppendFormat("DATE={0} ", DateTime.Now.ToString("dd-MMM-yyyy", new CultureInfo(CommonConfig.EnglishCultureCode)));
logEntry.AppendFormat("TIME={0} ", DateTime.Now.ToString("HH:mm:ss", new CultureInfo(CommonConfig.EnglishCultureCode)));
logEntry.AppendFormat("ERRORNO={0} ", base.RemoteIPAddress.ToString().Replace(".", string.Empty));
logEntry.AppendFormat("IP={0}", base.RemoteIPAddress.ToString());
logEntry.AppendFormat("LANG={0} ", base.Culture.TwoLetterISOLanguageName);
logEntry.AppendFormat("PNR={0} ", this.RecordLocator);
logEntry.AppendFormat("AGENT={0} ", base.UserAgent);
logEntry.AppendFormat("REF={0} ", base.Referrer);
logEntry.AppendFormat("SID={0} ", base.CurrentContext.Session.SessionID);
logEntry.AppendFormat("LOGTYPE={0} ", logType.ToString() );
if(extraParameters != null)
{
foreach(var s in extraParameters.Keys)
{
logEntry.AppendFormat("{0}={1} ", s, extraParameters[s] );
}
}
logEntry.AppendFormat("MESSAGE={0} ", message);
return logEntry;
}