/// <summary>
/// For logging WARNING and higher severity.
/// </summary>
/// <param name="level">severity level</param>
/// <param name="methodName">calling method</param>
/// <param name="toLog">message to log</param>
/// <param name="primaryState">class specific, appears before secondary state in log</param>
/// <param name="secondaryState">class specific, appears before message in log</param>
public void log(severity level, string methodName, string toLog, string primaryState = null, string secondaryState = null)
{
if (closed)
{
return;
}
lock_log.AcquireExclusive();
try {
if (logWriter == null)
{
if (MyAPIGateway.Utilities == null || !createLog())
{
return; // cannot log
}
}
if (f_gridName != null)
{
gridName = f_gridName.Invoke();
}
if (primaryState == null)
{
if (f_state_primary != null)
{
default_primary = f_state_primary.Invoke();
}
primaryState = default_primary;
}
if (secondaryState == null)
{
if (f_state_secondary != null)
{
default_secondary = f_state_secondary.Invoke();
}
secondaryState = default_secondary;
}
if (toLog == null)
{
toLog = "no message";
}
if (numLines >= maxNumLines)
{
return;
}
numLines++;
appendWithBrackets(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss,fff"));
appendWithBrackets(level.ToString());
appendWithBrackets(gridName);
appendWithBrackets(className);
appendWithBrackets(methodName);
appendWithBrackets(primaryState);
appendWithBrackets(secondaryState);
stringCache.Append(toLog);
logWriter.WriteLine(stringCache);
logWriter.Flush();
stringCache.Clear();
} catch { } finally { lock_log.ReleaseExclusive(); }
}