Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从方法中向字符串中间添加其他内容_C#_Oop - Fatal编程技术网

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; 
}