* Insert a new 'set log level [level] command on the console'

* The primary immediate use is to provide a means of temporarily reducing log output on the console when executing console commands
* Changing the log level on the console is not permanent and does not affect the log information being put into OpenSim.log
* This could have been done by putting in a threshold level on the Console appeneder in OpenSim.exe.config and implementing config watching in the code.
* But I think that it's a little more user friendly to make this doable via the console.
0.6.0-stable
Justin Clarke Casey 2008-08-16 20:24:08 +00:00
parent 701ee43e46
commit c602d76b79
4 changed files with 87 additions and 7 deletions

View File

@ -32,17 +32,22 @@ using log4net.Core;
namespace OpenSim.Framework.Console
{
/// <summary>
/// Writes log information out onto the console
/// </summary>
public class OpenSimAppender : AnsiColorTerminalAppender
{
override protected void Append(LoggingEvent le)
{
try {
try
{
string loggingMessage = RenderLoggingEvent(le);
string regex = @"^(?<Front>.*?)\[(?<Category>[^\]]+)\]:?(?<End>.*)";
Regex RE = new Regex(regex, RegexOptions.Multiline);
MatchCollection matches = RE.Matches(loggingMessage);
// Get some direct matches $1 $4 is a
if (matches.Count == 1)
{

View File

@ -33,6 +33,9 @@ using System.Text;
using System.Threading;
using System.Timers;
using log4net;
using log4net.Appender;
using log4net.Core;
using log4net.Repository;
using OpenSim.Framework.Console;
using OpenSim.Framework.Statistics;
@ -121,6 +124,50 @@ namespace OpenSim.Framework.Servers
return sb.ToString();
}
/// <summary>
/// Set the level of log notices being echoed to the console
/// </summary>
/// <param name="setParams"></param>
private void SetConsoleLogLevel(string[] setParams)
{
ILoggerRepository repository = LogManager.GetRepository();
IAppender[] appenders = repository.GetAppenders();
OpenSimAppender consoleAppender = null;
foreach (IAppender appender in appenders)
{
if (appender.Name == "Console")
{
consoleAppender = (OpenSimAppender)appender;
break;
}
}
if (null == consoleAppender)
{
Notice("No appender named Console found (see the log4net config file for this executable)!");
return;
}
if (setParams.Length > 0)
{
Level consoleLevel = repository.LevelMap[setParams[0]];
if (consoleLevel != null)
consoleAppender.Threshold = consoleLevel;
else
Notice(
String.Format(
"{0} is not a valid logging level. Valid logging levels are ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF",
setParams[0]));
}
// If there is no threshold set then the threshold is effectively everything.
Level thresholdLevel
= (null != consoleAppender.Threshold ? consoleAppender.Threshold : log4net.Core.Level.All);
Notice(String.Format("Console log level is {0}", thresholdLevel));
}
/// <summary>
/// Performs initialisation of the scene, such as loading configuration from disk.
/// </summary>
@ -156,6 +203,7 @@ namespace OpenSim.Framework.Servers
Notice("");
Notice("quit - equivalent to shutdown.");
Notice("set log level [level] - change the console logging level only. For example, off or debug.");
Notice("show info - show server information (e.g. startup path).");
if (m_stats != null)
@ -168,6 +216,10 @@ namespace OpenSim.Framework.Servers
break;
case "set":
Set(cmdparams);
break;
case "show":
if (cmdparams.Length > 0)
{
@ -182,13 +234,36 @@ namespace OpenSim.Framework.Servers
}
}
/// <summary>
/// Set an OpenSim parameter
/// </summary>
/// <param name="setArgs">
/// The arguments given to the set command.
/// </param>
public virtual void Set(string[] setArgs)
{
// Temporary while we only have one command which takes at least two parameters
if (setArgs.Length < 2)
return;
if (setArgs[0] == "log" && setArgs[1] == "level")
{
string[] setParams = new string[setArgs.Length - 2];
Array.Copy(setArgs, 2, setParams, 0, setArgs.Length - 2);
SetConsoleLogLevel(setParams);
}
}
/// <summary>
/// Outputs to the console information about the region
/// </summary>
/// <param name="ShowWhat">What information to display (valid arguments are "uptime", "users")</param>
public virtual void Show(string ShowWhat)
/// <param name="showWhat">
/// What information to display (valid arguments are "uptime", "users")
/// </param>
public virtual void Show(string showWhat)
{
switch (ShowWhat)
switch (showWhat)
{
case "info":
Notice("Version: " + m_version);

View File

@ -214,6 +214,7 @@ namespace OpenSim
{
base.RunCmd(command, cmdparams);
RunPluginCommands(command , cmdparams);
switch (command)
{
case "clear-assets":

View File

@ -48,7 +48,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
public delegate bool PacketMethod(IClientAPI simClient, Packet packet);
/// <summary>
/// Handles new client connections
/// Constructor takes a single Packet and authenticates everything