Add the experimental ability to dump stats (result of command "show stats all") to file OpenSimStats.log every 5 seconds.
This can currently only be activated with the console command "debug stats record start". Off by default. Records to file OpenSimStats.log for simulator and RobustStats.log for ROBUSTTeleportWork
parent
ac198068ab
commit
4c2f6de8e4
|
@ -81,6 +81,8 @@ namespace OpenSim.Framework.Monitoring
|
||||||
+ "More than one name can be given separated by spaces.\n"
|
+ "More than one name can be given separated by spaces.\n"
|
||||||
+ "THIS STATS FACILITY IS EXPERIMENTAL AND DOES NOT YET CONTAIN ALL STATS",
|
+ "THIS STATS FACILITY IS EXPERIMENTAL AND DOES NOT YET CONTAIN ALL STATS",
|
||||||
HandleShowStatsCommand);
|
HandleShowStatsCommand);
|
||||||
|
|
||||||
|
StatsLogger.RegisterConsoleCommands(console);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void HandleShowStatsCommand(string module, string[] cmd)
|
public static void HandleShowStatsCommand(string module, string[] cmd)
|
||||||
|
@ -145,29 +147,55 @@ namespace OpenSim.Framework.Monitoring
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<string> GetAllStatsReports()
|
||||||
|
{
|
||||||
|
List<string> reports = new List<string>();
|
||||||
|
|
||||||
|
foreach (var category in RegisteredStats.Values)
|
||||||
|
reports.AddRange(GetCategoryStatsReports(category));
|
||||||
|
|
||||||
|
return reports;
|
||||||
|
}
|
||||||
|
|
||||||
private static void OutputAllStatsToConsole(ICommandConsole con)
|
private static void OutputAllStatsToConsole(ICommandConsole con)
|
||||||
{
|
{
|
||||||
foreach (var category in RegisteredStats.Values)
|
foreach (string report in GetAllStatsReports())
|
||||||
{
|
con.Output(report);
|
||||||
OutputCategoryStatsToConsole(con, category);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static List<string> GetCategoryStatsReports(
|
||||||
|
SortedDictionary<string, SortedDictionary<string, Stat>> category)
|
||||||
|
{
|
||||||
|
List<string> reports = new List<string>();
|
||||||
|
|
||||||
|
foreach (var container in category.Values)
|
||||||
|
reports.AddRange(GetContainerStatsReports(container));
|
||||||
|
|
||||||
|
return reports;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void OutputCategoryStatsToConsole(
|
private static void OutputCategoryStatsToConsole(
|
||||||
ICommandConsole con, SortedDictionary<string, SortedDictionary<string, Stat>> category)
|
ICommandConsole con, SortedDictionary<string, SortedDictionary<string, Stat>> category)
|
||||||
{
|
{
|
||||||
foreach (var container in category.Values)
|
foreach (string report in GetCategoryStatsReports(category))
|
||||||
{
|
con.Output(report);
|
||||||
OutputContainerStatsToConsole(con, container);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void OutputContainerStatsToConsole( ICommandConsole con, SortedDictionary<string, Stat> container)
|
private static List<string> GetContainerStatsReports(SortedDictionary<string, Stat> container)
|
||||||
{
|
{
|
||||||
|
List<string> reports = new List<string>();
|
||||||
|
|
||||||
foreach (Stat stat in container.Values)
|
foreach (Stat stat in container.Values)
|
||||||
{
|
reports.Add(stat.ToConsoleString());
|
||||||
con.Output(stat.ToConsoleString());
|
|
||||||
|
return reports;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void OutputContainerStatsToConsole(
|
||||||
|
ICommandConsole con, SortedDictionary<string, Stat> container)
|
||||||
|
{
|
||||||
|
foreach (string report in GetContainerStatsReports(container))
|
||||||
|
con.Output(report);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creates an OSDMap of the format:
|
// Creates an OSDMap of the format:
|
||||||
|
|
|
@ -11,22 +11,56 @@
|
||||||
</appSettings>
|
</appSettings>
|
||||||
<log4net>
|
<log4net>
|
||||||
<appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
|
<appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
|
||||||
|
<filter type="log4net.Filter.LoggerMatchFilter">
|
||||||
|
<loggerToMatch value="special"/>
|
||||||
|
<acceptOnMatch value="false"/>
|
||||||
|
</filter>
|
||||||
<layout type="log4net.Layout.PatternLayout">
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
<conversionPattern value="%date{HH:mm:ss} - %message%newline" />
|
<conversionPattern value="%date{HH:mm:ss} - %message" />
|
||||||
|
<!-- console log with milliseconds. Useful for debugging -->
|
||||||
|
<!-- <conversionPattern value="%date{HH:mm:ss.fff} - %message" /> -->
|
||||||
</layout>
|
</layout>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
|
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
|
||||||
<file value="OpenSim.32BitLaunch.log" />
|
<file value="OpenSim.32BitLaunch.log" />
|
||||||
<appendToFile value="true" />
|
<appendToFile value="true" />
|
||||||
|
<filter type="log4net.Filter.LoggerMatchFilter">
|
||||||
|
<loggerToMatch value="special"/>
|
||||||
|
<acceptOnMatch value="false"/>
|
||||||
|
</filter>
|
||||||
<layout type="log4net.Layout.PatternLayout">
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
<conversionPattern value="%date %-5level - %logger %message%newline" />
|
<conversionPattern value="%date %-5level - %logger %message%newline" />
|
||||||
</layout>
|
</layout>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
<appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
|
||||||
|
<file value="OpenSimStats.log"/>
|
||||||
|
<appendToFile value="true" />
|
||||||
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
|
<conversionPattern value="%date - %message%newline" />
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
<root>
|
<root>
|
||||||
<level value="DEBUG" />
|
<level value="DEBUG" />
|
||||||
<appender-ref ref="Console" />
|
<appender-ref ref="Console" />
|
||||||
<appender-ref ref="LogFileAppender" />
|
<appender-ref ref="LogFileAppender" />
|
||||||
</root>
|
</root>
|
||||||
|
|
||||||
|
<!-- Independently control logging level for XEngine -->
|
||||||
|
<logger name="OpenSim.Region.ScriptEngine.XEngine">
|
||||||
|
<level value="INFO"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<!-- Independently control logging level for per region module loading -->
|
||||||
|
<logger name="OpenSim.ApplicationPlugins.RegionModulesController.RegionModulesControllerPlugin">
|
||||||
|
<level value="INFO"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<!-- used for stats recording -->
|
||||||
|
<logger name="special.StatsLogger">
|
||||||
|
<appender-ref ref="StatsLogFileAppender"/>
|
||||||
|
</logger>
|
||||||
</log4net>
|
</log4net>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
|
@ -11,6 +11,10 @@
|
||||||
</appSettings>
|
</appSettings>
|
||||||
<log4net>
|
<log4net>
|
||||||
<appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
|
<appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
|
||||||
|
<filter type="log4net.Filter.LoggerMatchFilter">
|
||||||
|
<loggerToMatch value="special"/>
|
||||||
|
<acceptOnMatch value="false"/>
|
||||||
|
</filter>
|
||||||
<layout type="log4net.Layout.PatternLayout">
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
<conversionPattern value="%date{HH:mm:ss} - %message" />
|
<conversionPattern value="%date{HH:mm:ss} - %message" />
|
||||||
<!-- console log with milliseconds. Useful for debugging -->
|
<!-- console log with milliseconds. Useful for debugging -->
|
||||||
|
@ -21,11 +25,23 @@
|
||||||
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
|
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
|
||||||
<file value="OpenSim.log" />
|
<file value="OpenSim.log" />
|
||||||
<appendToFile value="true" />
|
<appendToFile value="true" />
|
||||||
|
<filter type="log4net.Filter.LoggerMatchFilter">
|
||||||
|
<loggerToMatch value="special"/>
|
||||||
|
<acceptOnMatch value="false"/>
|
||||||
|
</filter>
|
||||||
<layout type="log4net.Layout.PatternLayout">
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
<conversionPattern value="%date %-5level - %logger %message%newline" />
|
<conversionPattern value="%date %-5level - %logger %message%newline" />
|
||||||
</layout>
|
</layout>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
<appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
|
||||||
|
<file value="OpenSimStats.log"/>
|
||||||
|
<appendToFile value="true" />
|
||||||
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
|
<conversionPattern value="%date - %message%newline" />
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
<root>
|
<root>
|
||||||
<level value="DEBUG" />
|
<level value="DEBUG" />
|
||||||
<appender-ref ref="Console" />
|
<appender-ref ref="Console" />
|
||||||
|
@ -42,5 +58,10 @@
|
||||||
<level value="INFO"/>
|
<level value="INFO"/>
|
||||||
</logger>
|
</logger>
|
||||||
|
|
||||||
|
<!-- used for stats recording -->
|
||||||
|
<logger name="special.StatsLogger">
|
||||||
|
<appender-ref ref="StatsLogFileAppender"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
</log4net>
|
</log4net>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
|
@ -11,22 +11,44 @@
|
||||||
</appSettings>
|
</appSettings>
|
||||||
<log4net>
|
<log4net>
|
||||||
<appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
|
<appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
|
||||||
|
<filter type="log4net.Filter.LoggerMatchFilter">
|
||||||
|
<loggerToMatch value="special"/>
|
||||||
|
<acceptOnMatch value="false"/>
|
||||||
|
</filter>
|
||||||
<layout type="log4net.Layout.PatternLayout">
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
<conversionPattern value="%date{HH:mm:ss} - %message%newline" />
|
<conversionPattern value="%date{HH:mm:ss} - %message%newline" />
|
||||||
</layout>
|
</layout>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
|
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
|
||||||
<file value="Robust.32BitLaunch.log" />
|
<file value="Robust.32BitLaunch.log" />
|
||||||
<appendToFile value="true" />
|
<appendToFile value="true" />
|
||||||
|
<filter type="log4net.Filter.LoggerMatchFilter">
|
||||||
|
<loggerToMatch value="special"/>
|
||||||
|
<acceptOnMatch value="false"/>
|
||||||
|
</filter>
|
||||||
<layout type="log4net.Layout.PatternLayout">
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
<conversionPattern value="%date %-5level - %logger %message%newline" />
|
<conversionPattern value="%date %-5level - %logger %message%newline" />
|
||||||
</layout>
|
</layout>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
<appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
|
||||||
|
<file value="RobustStats.log"/>
|
||||||
|
<appendToFile value="true" />
|
||||||
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
|
<conversionPattern value="%date - %message%newline" />
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
<root>
|
<root>
|
||||||
<level value="DEBUG" />
|
<level value="DEBUG" />
|
||||||
<appender-ref ref="Console" />
|
<appender-ref ref="Console" />
|
||||||
<appender-ref ref="LogFileAppender" />
|
<appender-ref ref="LogFileAppender" />
|
||||||
</root>
|
</root>
|
||||||
|
|
||||||
|
<!-- used for stats recording -->
|
||||||
|
<logger name="special.StatsLogger">
|
||||||
|
<appender-ref ref="StatsLogFileAppender"/>
|
||||||
|
</logger>
|
||||||
</log4net>
|
</log4net>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
|
@ -11,6 +11,10 @@
|
||||||
</appSettings>
|
</appSettings>
|
||||||
<log4net>
|
<log4net>
|
||||||
<appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
|
<appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
|
||||||
|
<filter type="log4net.Filter.LoggerMatchFilter">
|
||||||
|
<loggerToMatch value="special"/>
|
||||||
|
<acceptOnMatch value="false"/>
|
||||||
|
</filter>
|
||||||
<layout type="log4net.Layout.PatternLayout">
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
<conversionPattern value="%date{HH:mm:ss} - %message%newline" />
|
<conversionPattern value="%date{HH:mm:ss} - %message%newline" />
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -19,15 +23,32 @@
|
||||||
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
|
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
|
||||||
<file value="Robust.log" />
|
<file value="Robust.log" />
|
||||||
<appendToFile value="true" />
|
<appendToFile value="true" />
|
||||||
|
<filter type="log4net.Filter.LoggerMatchFilter">
|
||||||
|
<loggerToMatch value="special"/>
|
||||||
|
<acceptOnMatch value="false"/>
|
||||||
|
</filter>
|
||||||
<layout type="log4net.Layout.PatternLayout">
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
<conversionPattern value="%date %-5level - %logger %message%newline" />
|
<conversionPattern value="%date %-5level - %logger %message%newline" />
|
||||||
</layout>
|
</layout>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
<appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
|
||||||
|
<file value="RobustStats.log"/>
|
||||||
|
<appendToFile value="true" />
|
||||||
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
|
<conversionPattern value="%date - %message%newline" />
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
<root>
|
<root>
|
||||||
<level value="DEBUG" />
|
<level value="DEBUG" />
|
||||||
<appender-ref ref="Console" />
|
<appender-ref ref="Console" />
|
||||||
<appender-ref ref="LogFileAppender" />
|
<appender-ref ref="LogFileAppender" />
|
||||||
</root>
|
</root>
|
||||||
|
|
||||||
|
<!-- used for stats recording -->
|
||||||
|
<logger name="special.StatsLogger">
|
||||||
|
<appender-ref ref="StatsLogFileAppender"/>
|
||||||
|
</logger>
|
||||||
</log4net>
|
</log4net>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
Loading…
Reference in New Issue