- [Core] Add option to toggle logger events [GUI/CLI]

This commit is contained in:
Razmoth
2024-01-22 20:22:55 +04:00
parent 0cdad5ef1a
commit 59478d9c05
11 changed files with 125 additions and 91 deletions

View File

@@ -21,7 +21,7 @@ namespace AssetStudio.CLI
var rootCommand = new RootCommand()
{
optionsBinder.Silent,
optionsBinder.Verbose,
optionsBinder.LoggerFlags,
optionsBinder.TypeFilter,
optionsBinder.NameFilter,
optionsBinder.ContainerFilter,
@@ -49,7 +49,7 @@ namespace AssetStudio.CLI
public class Options
{
public bool Silent { get; set; }
public bool Verbose { get; set; }
public LoggerEvent LoggerFlags { get; set; }
public ClassIDType[] TypeFilter { get; set; }
public Regex[] NameFilter { get; set; }
public Regex[] ContainerFilter { get; set; }
@@ -72,7 +72,7 @@ namespace AssetStudio.CLI
public class OptionsBinder : BinderBase<Options>
{
public readonly Option<bool> Silent;
public readonly Option<bool> Verbose;
public readonly Option<LoggerEvent> LoggerFlags;
public readonly Option<ClassIDType[]> TypeFilter;
public readonly Option<Regex[]> NameFilter;
public readonly Option<Regex[]> ContainerFilter;
@@ -94,7 +94,7 @@ namespace AssetStudio.CLI
public OptionsBinder()
{
Silent = new Option<bool>("--silent", "Hide log messages.");
Verbose = new Option<bool>("--verbose", "Enable verbose logging.");
LoggerFlags = new Option<LoggerEvent>("--logger_flags", "Flags to control toggle log events.");
TypeFilter = new Option<ClassIDType[]>("--types", "Specify unity class type(s)") { AllowMultipleArgumentsPerToken = true, ArgumentHelpName = "Texture2D|Sprite|etc.." };
NameFilter = new Option<Regex[]>("--names", result => result.Tokens.Select(x => new Regex(x.Value, RegexOptions.IgnoreCase)).ToArray(), false, "Specify name regex filter(s).") { AllowMultipleArgumentsPerToken = true };
ContainerFilter = new Option<Regex[]>("--containers", result => result.Tokens.Select(x => new Regex(x.Value, RegexOptions.IgnoreCase)).ToArray(), false, "Specify container regex filter(s).") { AllowMultipleArgumentsPerToken = true };
@@ -152,6 +152,7 @@ namespace AssetStudio.CLI
GameName.FromAmong(GameManager.GetGameNames());
LoggerFlags.SetDefaultValue(LoggerEvent.Default);
GroupAssetsType.SetDefaultValue(AssetGroupOption.ByType);
AssetExportType.SetDefaultValue(ExportType.Convert);
MapOp.SetDefaultValue(MapOpType.None);
@@ -186,7 +187,7 @@ namespace AssetStudio.CLI
new()
{
Silent = bindingContext.ParseResult.GetValueForOption(Silent),
Verbose = bindingContext.ParseResult.GetValueForOption(Verbose),
LoggerFlags = bindingContext.ParseResult.GetValueForOption(LoggerFlags),
TypeFilter = bindingContext.ParseResult.GetValueForOption(TypeFilter),
NameFilter = bindingContext.ParseResult.GetValueForOption(NameFilter),
ContainerFilter = bindingContext.ParseResult.GetValueForOption(ContainerFilter),

View File

@@ -39,8 +39,7 @@ namespace AssetStudio.CLI
}
Studio.Game = game;
Logger.Default = new ConsoleLogger();
Logger.LogVerbose = o.Verbose;
Logger.Default = new ConsoleLogger() { Flags = o.LoggerFlags };
Logger.FileLogging = Settings.Default.enableFileLogging;
AssetsHelper.Minimal = Settings.Default.minimalAssetMap;
AssetsHelper.SetUnityVersion(o.UnityVersion);

View File

@@ -106,18 +106,18 @@
<setting name="enableFileLogging" serializeAs="String">
<value>True</value>
</setting>
<setting name="enableVerbose" serializeAs="String">
<value>False</value>
</setting>
<setting name="allowDuplicates" serializeAs="String">
<value>False</value>
</setting>
<setting name="texs" serializeAs="String">
<value>{}</value>
</setting>
<setting name="uvs" serializeAs="String">
<value>{"UV0":{"Item1":true,"Item2":0},"UV1":{"Item1":true,"Item2":1},"UV2":{"Item1":false,"Item2":0},"UV3":{"Item1":false,"Item2":0},"UV4":{"Item1":false,"Item2":0},"UV5":{"Item1":false,"Item2":0},"UV6":{"Item1":false,"Item2":0},"UV7":{"Item1":false,"Item2":0}}</value>
</setting>
<setting name="allowDuplicates" serializeAs="String">
<value>False</value>
</setting>
<setting name="loggerEventType" serializeAs="String">
<value>30</value>
</setting>
</AssetStudio.GUI.Properties.Settings>
</userSettings>
</configuration>

View File

@@ -8,14 +8,17 @@ namespace AssetStudio.GUI
public bool ShowErrorMessage = true;
private Action<string> action;
public bool Silent { get; set; }
public LoggerEvent Flags { get; set; }
public GUILogger(Action<string> action)
{
this.action = action;
}
public void Log(LoggerEvent loggerEvent, string message, bool silent = false)
public void Log(LoggerEvent loggerEvent, string message)
{
if (silent)
if (!Flags.HasFlag(loggerEvent) || Silent)
return;
switch (loggerEvent)

View File

@@ -51,6 +51,7 @@ namespace AssetStudio.GUI
toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator();
displayInfo = new System.Windows.Forms.ToolStripMenuItem();
enableResolveDependencies = new System.Windows.Forms.ToolStripMenuItem();
allowDuplicates = new System.Windows.Forms.ToolStripMenuItem();
skipContainer = new System.Windows.Forms.ToolStripMenuItem();
toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator();
toolStripMenuItem14 = new System.Windows.Forms.ToolStripMenuItem();
@@ -105,7 +106,7 @@ namespace AssetStudio.GUI
enableConsole = new System.Windows.Forms.ToolStripMenuItem();
clearConsoleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
enableFileLogging = new System.Windows.Forms.ToolStripMenuItem();
enableVerbose = new System.Windows.Forms.ToolStripMenuItem();
loggedEventsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
miscToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
MapNameComboBox = new System.Windows.Forms.ToolStripComboBox();
buildMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -173,7 +174,6 @@ namespace AssetStudio.GUI
exportAnimatorwithselectedAnimationClipMenuItem = new System.Windows.Forms.ToolStripMenuItem();
goToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
showOriginalFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
allowDuplicates = new System.Windows.Forms.ToolStripMenuItem();
menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
@@ -338,6 +338,15 @@ namespace AssetStudio.GUI
enableResolveDependencies.ToolTipText = "Toggle the behaviour of loading assets.\r\nDisable to load file(s) without its dependencies.";
enableResolveDependencies.CheckedChanged += enableResolveDependencies_CheckedChanged;
//
// allowDuplicates
//
allowDuplicates.CheckOnClick = true;
allowDuplicates.Name = "allowDuplicates";
allowDuplicates.Size = new System.Drawing.Size(225, 22);
allowDuplicates.Text = "Allow duplicates";
allowDuplicates.ToolTipText = "Toggle the behaviour of exporting assets.\r\nEnable to allow assets with duplicate names to be exported.";
allowDuplicates.CheckedChanged += allowDuplicates_CheckedChanged;
//
// skipContainer
//
skipContainer.CheckOnClick = true;
@@ -660,13 +669,13 @@ namespace AssetStudio.GUI
allToolStripMenuItem.CheckOnClick = true;
allToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
allToolStripMenuItem.Name = "allToolStripMenuItem";
allToolStripMenuItem.Size = new System.Drawing.Size(88, 22);
allToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
allToolStripMenuItem.Text = "All";
allToolStripMenuItem.Click += typeToolStripMenuItem_Click;
//
// debugMenuItem
//
debugMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { toolStripMenuItem15, exportClassStructuresMenuItem, enableConsole, clearConsoleToolStripMenuItem, enableFileLogging, enableVerbose });
debugMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { toolStripMenuItem15, exportClassStructuresMenuItem, enableConsole, clearConsoleToolStripMenuItem, enableFileLogging, loggedEventsMenuItem });
debugMenuItem.Name = "debugMenuItem";
debugMenuItem.Size = new System.Drawing.Size(54, 20);
debugMenuItem.Text = "Debug";
@@ -715,13 +724,13 @@ namespace AssetStudio.GUI
enableFileLogging.Text = "Enable file logging";
enableFileLogging.CheckedChanged += enableFileLogging_CheckedChanged;
//
// enableVerbose
// loggedEventsMenuItem
//
enableVerbose.CheckOnClick = true;
enableVerbose.Name = "enableVerbose";
enableVerbose.Size = new System.Drawing.Size(191, 22);
enableVerbose.Text = "Enable Verbose";
enableVerbose.CheckedChanged += enableVerbose_Click;
loggedEventsMenuItem.Name = "loggedEventsMenuItem";
loggedEventsMenuItem.Size = new System.Drawing.Size(191, 22);
loggedEventsMenuItem.Text = "Logged events";
loggedEventsMenuItem.DropDown.Closing += loggedEventsMenuItem_DropDownClosing;
loggedEventsMenuItem.DropDownClosed += loggedEventsMenuItem_DropDownClosed;
//
// miscToolStripMenuItem
//
@@ -1353,15 +1362,6 @@ namespace AssetStudio.GUI
showOriginalFileToolStripMenuItem.Visible = false;
showOriginalFileToolStripMenuItem.Click += showOriginalFileToolStripMenuItem_Click;
//
// allowDuplicates
//
allowDuplicates.CheckOnClick = true;
allowDuplicates.Name = "allowDuplicates";
allowDuplicates.Size = new System.Drawing.Size(225, 22);
allowDuplicates.Text = "Allow duplicates";
allowDuplicates.ToolTipText = "Toggle the behaviour of exporting assets.\r\nEnable to allow assets with duplicate names to be exported.";
allowDuplicates.CheckedChanged += allowDuplicates_CheckedChanged;
//
// MainForm
//
AllowDrop = true;
@@ -1548,7 +1548,7 @@ namespace AssetStudio.GUI
private System.Windows.Forms.ToolStripMenuItem specifyUnityCNKey;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator13;
private System.Windows.Forms.ToolStripMenuItem enableFileLogging;
private System.Windows.Forms.ToolStripMenuItem enableVerbose;
private System.Windows.Forms.ToolStripMenuItem loggedEventsMenuItem;
private System.Windows.Forms.ToolStripMenuItem sceneHierarchy;
private System.Windows.Forms.ToolStripMenuItem assetMapTypeMenuItem;
private System.Windows.Forms.ToolStripMenuItem loadCABMapToolStripMenuItem;

View File

@@ -98,7 +98,6 @@ namespace AssetStudio.GUI
{
enableConsole.Checked = Properties.Settings.Default.enableConsole;
enableFileLogging.Checked = Properties.Settings.Default.enableFileLogging;
enableVerbose.Checked = Properties.Settings.Default.enableVerbose;
displayAll.Checked = Properties.Settings.Default.displayAll;
displayInfo.Checked = Properties.Settings.Default.displayInfo;
enablePreview.Checked = Properties.Settings.Default.enablePreview;
@@ -130,7 +129,14 @@ namespace AssetStudio.GUI
Logger.Default = logger;
ConsoleHelper.ShowWindow(handle, ConsoleHelper.SW_HIDE);
}
Logger.LogVerbose = enableVerbose.Checked;
var loggerEventType = (LoggerEvent)Properties.Settings.Default.loggerEventType;
var loggerEventTypes = Enum.GetValues<LoggerEvent>().ToArray()[1..^2];
foreach (var loggerEvent in loggerEventTypes)
{
var menuItem = new ToolStripMenuItem(loggerEvent.ToString()) { CheckOnClick = true, Checked = loggerEventType.HasFlag(loggerEvent), Tag = (int)loggerEvent };
loggedEventsMenuItem.DropDownItems.Add(menuItem);
}
Logger.Default.Flags = loggerEventType;
Logger.FileLogging = enableFileLogging.Checked;
}
@@ -2325,12 +2331,20 @@ namespace AssetStudio.GUI
Logger.FileLogging = enableFileLogging.Checked;
}
private void enableVerbose_Click(object sender, EventArgs e)
private void loggedEventsMenuItem_DropDownClosing(object sender, ToolStripDropDownClosingEventArgs e)
{
Properties.Settings.Default.enableVerbose = enableVerbose.Checked;
if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked)
{
e.Cancel = true;
}
}
private void loggedEventsMenuItem_DropDownClosed(object sender, EventArgs e)
{
Properties.Settings.Default.loggerEventType = loggedEventsMenuItem.DropDownItems.Cast<ToolStripMenuItem>().Select(x => x.Checked ? (int)x.Tag : 0).Sum();
Properties.Settings.Default.Save();
Logger.LogVerbose = enableVerbose.Checked;
Logger.Default.Flags = (LoggerEvent)Properties.Settings.Default.loggerEventType;
}
private void abortStripMenuItem_Click(object sender, EventArgs e)

View File

@@ -120,6 +120,9 @@
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>312, 17</value>
</metadata>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>432, 17</value>
</metadata>
<data name="fontPreviewBox.Text" xml:space="preserve">
<value>abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWYZ
1234567890.:,;'\"(!?)+-*/=
@@ -138,9 +141,6 @@ The quick brown fox jumps over the lazy dog. 1234567890
The quick brown fox jumps over the lazy dog. 1234567890</value>
</data>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>432, 17</value>
</metadata>
<metadata name="timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>553, 17</value>
</metadata>

View File

@@ -431,18 +431,6 @@ namespace AssetStudio.GUI.Properties {
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool enableVerbose {
get {
return ((bool)(this["enableVerbose"]));
}
set {
this["enableVerbose"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("{}")]
@@ -481,5 +469,17 @@ namespace AssetStudio.GUI.Properties {
this["allowDuplicates"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("30")]
public int loggerEventType {
get {
return ((int)(this["loggerEventType"]));
}
set {
this["loggerEventType"] = value;
}
}
}
}

View File

@@ -104,9 +104,6 @@
<Setting Name="enableFileLogging" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="enableVerbose" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="texs" Type="System.String" Scope="User">
<Value Profile="(Default)">{}</Value>
</Setting>
@@ -116,5 +113,8 @@
<Setting Name="allowDuplicates" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="loggerEventType" Type="System.Int32" Scope="User">
<Value Profile="(Default)">30</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -6,30 +6,40 @@ using System.Text;
namespace AssetStudio
{
[Flags]
public enum LoggerEvent
{
Verbose,
Debug,
Info,
Warning,
Error,
None = 0,
Verbose = 1,
Debug = 2,
Info = 4,
Warning = 8,
Error = 16,
Default = Debug | Info | Warning | Error,
All = Verbose | Debug | Info | Warning | Error,
}
public interface ILogger
{
void Log(LoggerEvent loggerEvent, string message, bool silent = false);
public bool Silent { get; set; }
public LoggerEvent Flags { get; set; }
void Log(LoggerEvent loggerEvent, string message);
}
public sealed class DummyLogger : ILogger
{
public void Log(LoggerEvent loggerEvent, string message, bool silent = false) { }
public bool Silent { get; set; }
public LoggerEvent Flags { get; set; }
public void Log(LoggerEvent loggerEvent, string message) { }
}
public sealed class ConsoleLogger : ILogger
{
public void Log(LoggerEvent loggerEvent, string message, bool silent = false)
public bool Silent { get; set; }
public LoggerEvent Flags { get; set; }
public void Log(LoggerEvent loggerEvent, string message)
{
if (silent)
if (!Flags.HasFlag(loggerEvent) || Silent)
return;
Console.WriteLine("[{0}] {1}", loggerEvent, message);
@@ -41,9 +51,10 @@ namespace AssetStudio
private const string LogFileName = "log.txt";
private const string PrevLogFileName = "log_prev.txt";
private readonly object LockWriter = new object();
private StreamWriter Writer;
public StreamWriter Writer;
public bool Silent { get; set; }
public LoggerEvent Flags { get; set; }
public FileLogger()
{
var logPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LogFileName);
@@ -57,11 +68,11 @@ namespace AssetStudio
}
~FileLogger()
{
Writer?.Dispose();
Dispose();
}
public void Log(LoggerEvent loggerEvent, string message, bool silent = false)
public void Log(LoggerEvent loggerEvent, string message)
{
if (silent)
if (!Flags.HasFlag(loggerEvent) || Silent)
return;
lock (LockWriter)
@@ -69,5 +80,10 @@ namespace AssetStudio
Writer.WriteLine($"[{DateTime.Now}][{loggerEvent}] {message}");
}
}
public void Dispose()
{
Writer?.Dispose();
}
}
}

View File

@@ -12,8 +12,12 @@ namespace AssetStudio
public static ILogger Default = new DummyLogger();
public static ILogger File;
public static bool Silent = false;
public static bool LogVerbose = false;
public static bool Silent
{
get => Default.Silent;
set => Default.Silent = value;
}
public static bool FileLogging
{
@@ -36,15 +40,13 @@ namespace AssetStudio
}
else
{
((FileLogger)File)?.Writer?.Dispose();
((FileLogger)File)?.Dispose();
File = null;
}
}
}
public static void Verbose(string message)
{
if (LogVerbose)
{
try
{
@@ -57,28 +59,27 @@ namespace AssetStudio
}
catch (Exception) { }
if (FileLogging) File.Log(LoggerEvent.Verbose, message);
Default.Log(LoggerEvent.Verbose, message, Silent);
}
Default.Log(LoggerEvent.Verbose, message);
}
public static void Debug(string message)
{
if (FileLogging) File.Log(LoggerEvent.Debug, message);
Default.Log(LoggerEvent.Debug, message, Silent);
Default.Log(LoggerEvent.Debug, message);
}
public static void Info(string message)
{
if (FileLogging) File.Log(LoggerEvent.Info, message);
Default.Log(LoggerEvent.Info, message, Silent);
Default.Log(LoggerEvent.Info, message);
}
public static void Warning(string message)
{
if (FileLogging) File.Log(LoggerEvent.Warning, message);
Default.Log(LoggerEvent.Warning, message, Silent);
Default.Log(LoggerEvent.Warning, message);
}
public static void Error(string message)
{
if (FileLogging) File.Log(LoggerEvent.Error, message);
Default.Log(LoggerEvent.Error, message, Silent);
Default.Log(LoggerEvent.Error, message);
}
public static void Error(string message, Exception e)
@@ -89,7 +90,7 @@ namespace AssetStudio
message = sb.ToString();
if (FileLogging) File.Log(LoggerEvent.Error, message);
Default.Log(LoggerEvent.Error, message, Silent);
Default.Log(LoggerEvent.Error, message);
}
}
}