- [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() var rootCommand = new RootCommand()
{ {
optionsBinder.Silent, optionsBinder.Silent,
optionsBinder.Verbose, optionsBinder.LoggerFlags,
optionsBinder.TypeFilter, optionsBinder.TypeFilter,
optionsBinder.NameFilter, optionsBinder.NameFilter,
optionsBinder.ContainerFilter, optionsBinder.ContainerFilter,
@@ -49,7 +49,7 @@ namespace AssetStudio.CLI
public class Options public class Options
{ {
public bool Silent { get; set; } public bool Silent { get; set; }
public bool Verbose { get; set; } public LoggerEvent LoggerFlags { get; set; }
public ClassIDType[] TypeFilter { get; set; } public ClassIDType[] TypeFilter { get; set; }
public Regex[] NameFilter { get; set; } public Regex[] NameFilter { get; set; }
public Regex[] ContainerFilter { get; set; } public Regex[] ContainerFilter { get; set; }
@@ -72,7 +72,7 @@ namespace AssetStudio.CLI
public class OptionsBinder : BinderBase<Options> public class OptionsBinder : BinderBase<Options>
{ {
public readonly Option<bool> Silent; public readonly Option<bool> Silent;
public readonly Option<bool> Verbose; public readonly Option<LoggerEvent> LoggerFlags;
public readonly Option<ClassIDType[]> TypeFilter; public readonly Option<ClassIDType[]> TypeFilter;
public readonly Option<Regex[]> NameFilter; public readonly Option<Regex[]> NameFilter;
public readonly Option<Regex[]> ContainerFilter; public readonly Option<Regex[]> ContainerFilter;
@@ -94,7 +94,7 @@ namespace AssetStudio.CLI
public OptionsBinder() public OptionsBinder()
{ {
Silent = new Option<bool>("--silent", "Hide log messages."); 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.." }; 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 }; 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 }; 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()); GameName.FromAmong(GameManager.GetGameNames());
LoggerFlags.SetDefaultValue(LoggerEvent.Default);
GroupAssetsType.SetDefaultValue(AssetGroupOption.ByType); GroupAssetsType.SetDefaultValue(AssetGroupOption.ByType);
AssetExportType.SetDefaultValue(ExportType.Convert); AssetExportType.SetDefaultValue(ExportType.Convert);
MapOp.SetDefaultValue(MapOpType.None); MapOp.SetDefaultValue(MapOpType.None);
@@ -186,7 +187,7 @@ namespace AssetStudio.CLI
new() new()
{ {
Silent = bindingContext.ParseResult.GetValueForOption(Silent), Silent = bindingContext.ParseResult.GetValueForOption(Silent),
Verbose = bindingContext.ParseResult.GetValueForOption(Verbose), LoggerFlags = bindingContext.ParseResult.GetValueForOption(LoggerFlags),
TypeFilter = bindingContext.ParseResult.GetValueForOption(TypeFilter), TypeFilter = bindingContext.ParseResult.GetValueForOption(TypeFilter),
NameFilter = bindingContext.ParseResult.GetValueForOption(NameFilter), NameFilter = bindingContext.ParseResult.GetValueForOption(NameFilter),
ContainerFilter = bindingContext.ParseResult.GetValueForOption(ContainerFilter), ContainerFilter = bindingContext.ParseResult.GetValueForOption(ContainerFilter),

View File

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

View File

@@ -106,18 +106,18 @@
<setting name="enableFileLogging" serializeAs="String"> <setting name="enableFileLogging" serializeAs="String">
<value>True</value> <value>True</value>
</setting> </setting>
<setting name="enableVerbose" serializeAs="String">
<value>False</value>
</setting>
<setting name="allowDuplicates" serializeAs="String">
<value>False</value>
</setting>
<setting name="texs" serializeAs="String"> <setting name="texs" serializeAs="String">
<value>{}</value> <value>{}</value>
</setting> </setting>
<setting name="uvs" serializeAs="String"> <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> <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>
<setting name="allowDuplicates" serializeAs="String">
<value>False</value>
</setting>
<setting name="loggerEventType" serializeAs="String">
<value>30</value>
</setting>
</AssetStudio.GUI.Properties.Settings> </AssetStudio.GUI.Properties.Settings>
</userSettings> </userSettings>
</configuration> </configuration>

View File

@@ -8,14 +8,17 @@ namespace AssetStudio.GUI
public bool ShowErrorMessage = true; public bool ShowErrorMessage = true;
private Action<string> action; private Action<string> action;
public bool Silent { get; set; }
public LoggerEvent Flags { get; set; }
public GUILogger(Action<string> action) public GUILogger(Action<string> action)
{ {
this.action = 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; return;
switch (loggerEvent) switch (loggerEvent)

View File

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

View File

@@ -98,7 +98,6 @@ namespace AssetStudio.GUI
{ {
enableConsole.Checked = Properties.Settings.Default.enableConsole; enableConsole.Checked = Properties.Settings.Default.enableConsole;
enableFileLogging.Checked = Properties.Settings.Default.enableFileLogging; enableFileLogging.Checked = Properties.Settings.Default.enableFileLogging;
enableVerbose.Checked = Properties.Settings.Default.enableVerbose;
displayAll.Checked = Properties.Settings.Default.displayAll; displayAll.Checked = Properties.Settings.Default.displayAll;
displayInfo.Checked = Properties.Settings.Default.displayInfo; displayInfo.Checked = Properties.Settings.Default.displayInfo;
enablePreview.Checked = Properties.Settings.Default.enablePreview; enablePreview.Checked = Properties.Settings.Default.enablePreview;
@@ -130,7 +129,14 @@ namespace AssetStudio.GUI
Logger.Default = logger; Logger.Default = logger;
ConsoleHelper.ShowWindow(handle, ConsoleHelper.SW_HIDE); 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; Logger.FileLogging = enableFileLogging.Checked;
} }
@@ -2325,12 +2331,20 @@ namespace AssetStudio.GUI
Logger.FileLogging = enableFileLogging.Checked; 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(); Properties.Settings.Default.Save();
Logger.LogVerbose = enableVerbose.Checked; Logger.Default.Flags = (LoggerEvent)Properties.Settings.Default.loggerEventType;
} }
private void abortStripMenuItem_Click(object sender, EventArgs e) 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"> <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>312, 17</value> <value>312, 17</value>
</metadata> </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"> <data name="fontPreviewBox.Text" xml:space="preserve">
<value>abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWYZ <value>abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWYZ
1234567890.:,;'\"(!?)+-*/= 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> The quick brown fox jumps over the lazy dog. 1234567890</value>
</data> </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"> <metadata name="timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>553, 17</value> <value>553, 17</value>
</metadata> </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.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("{}")] [global::System.Configuration.DefaultSettingValueAttribute("{}")]
@@ -481,5 +469,17 @@ namespace AssetStudio.GUI.Properties {
this["allowDuplicates"] = value; 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"> <Setting Name="enableFileLogging" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value> <Value Profile="(Default)">True</Value>
</Setting> </Setting>
<Setting Name="enableVerbose" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="texs" Type="System.String" Scope="User"> <Setting Name="texs" Type="System.String" Scope="User">
<Value Profile="(Default)">{}</Value> <Value Profile="(Default)">{}</Value>
</Setting> </Setting>
@@ -116,5 +113,8 @@
<Setting Name="allowDuplicates" Type="System.Boolean" Scope="User"> <Setting Name="allowDuplicates" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value> <Value Profile="(Default)">False</Value>
</Setting> </Setting>
<Setting Name="loggerEventType" Type="System.Int32" Scope="User">
<Value Profile="(Default)">30</Value>
</Setting>
</Settings> </Settings>
</SettingsFile> </SettingsFile>

View File

@@ -6,30 +6,40 @@ using System.Text;
namespace AssetStudio namespace AssetStudio
{ {
[Flags]
public enum LoggerEvent public enum LoggerEvent
{ {
Verbose, None = 0,
Debug, Verbose = 1,
Info, Debug = 2,
Warning, Info = 4,
Error, Warning = 8,
Error = 16,
Default = Debug | Info | Warning | Error,
All = Verbose | Debug | Info | Warning | Error,
} }
public interface ILogger 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 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 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; return;
Console.WriteLine("[{0}] {1}", loggerEvent, message); Console.WriteLine("[{0}] {1}", loggerEvent, message);
@@ -41,9 +51,10 @@ namespace AssetStudio
private const string LogFileName = "log.txt"; private const string LogFileName = "log.txt";
private const string PrevLogFileName = "log_prev.txt"; private const string PrevLogFileName = "log_prev.txt";
private readonly object LockWriter = new object(); private readonly object LockWriter = new object();
private StreamWriter Writer;
public StreamWriter Writer; public bool Silent { get; set; }
public LoggerEvent Flags { get; set; }
public FileLogger() public FileLogger()
{ {
var logPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LogFileName); var logPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LogFileName);
@@ -57,11 +68,11 @@ namespace AssetStudio
} }
~FileLogger() ~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; return;
lock (LockWriter) lock (LockWriter)
@@ -69,5 +80,10 @@ namespace AssetStudio
Writer.WriteLine($"[{DateTime.Now}][{loggerEvent}] {message}"); 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 Default = new DummyLogger();
public static ILogger File; 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 public static bool FileLogging
{ {
@@ -36,7 +40,7 @@ namespace AssetStudio
} }
else else
{ {
((FileLogger)File)?.Writer?.Dispose(); ((FileLogger)File)?.Dispose();
File = null; File = null;
} }
} }
@@ -44,41 +48,38 @@ namespace AssetStudio
public static void Verbose(string message) public static void Verbose(string message)
{ {
if (LogVerbose) try
{ {
try var callerMethod = new StackTrace().GetFrame(1).GetMethod();
var callerMethodClass = callerMethod.ReflectedType.Name;
if (!string.IsNullOrEmpty(callerMethodClass))
{ {
var callerMethod = new StackTrace().GetFrame(1).GetMethod(); message = $"[{callerMethodClass}] {message}";
var callerMethodClass = callerMethod.ReflectedType.Name;
if (!string.IsNullOrEmpty(callerMethodClass))
{
message = $"[{callerMethodClass}] {message}";
}
} }
catch (Exception) { }
if (FileLogging) File.Log(LoggerEvent.Verbose, message);
Default.Log(LoggerEvent.Verbose, message, Silent);
} }
catch (Exception) { }
if (FileLogging) File.Log(LoggerEvent.Verbose, message);
Default.Log(LoggerEvent.Verbose, message);
} }
public static void Debug(string message) public static void Debug(string message)
{ {
if (FileLogging) File.Log(LoggerEvent.Debug, 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) public static void Info(string message)
{ {
if (FileLogging) File.Log(LoggerEvent.Info, 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) public static void Warning(string message)
{ {
if (FileLogging) File.Log(LoggerEvent.Warning, 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) public static void Error(string message)
{ {
if (FileLogging) File.Log(LoggerEvent.Error, 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) public static void Error(string message, Exception e)
@@ -89,7 +90,7 @@ namespace AssetStudio
message = sb.ToString(); message = sb.ToString();
if (FileLogging) File.Log(LoggerEvent.Error, message); if (FileLogging) File.Log(LoggerEvent.Error, message);
Default.Log(LoggerEvent.Error, message, Silent); Default.Log(LoggerEvent.Error, message);
} }
} }
} }