diff --git a/.github/workflows/build_dotnet.yml b/.github/workflows/build_dotnet.yml
index 61a039f1..bc9e5d8f 100644
--- a/.github/workflows/build_dotnet.yml
+++ b/.github/workflows/build_dotnet.yml
@@ -10,26 +10,32 @@ on:
env:
Solution: src/LogExpert.sln
- Test_Project: src/LogExpert.Tests/LogExpert.Tests.csproj
+ Test_Project_LogExpert: src/LogExpert.Tests/LogExpert.Tests.csproj
+ Test_Project_ColumnizerLib: src/ColumnizerLib.UnitTests/ColumnizerLib.UnitTests.csproj
+ Test_Project_PluginRegistry: src/PluginRegistry.Tests/PluginRegistry.Tests.csproj
+ Test_Project_RegexColumnizer: src/RegexColumnizer.UnitTests/RegexColumnizer.UnitTests.csproj
jobs:
build:
- permissions:
- contents: read
-
+ permissions:
+ contents: write # Changed to 'write' for committing
+ pull-requests: write # Added for PR operations
+
strategy:
fail-fast: false
matrix:
configuration: [Debug, Release]
-
+
runs-on: windows-latest
name: Build Application - ${{ matrix.configuration }}
-
+
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
+ token: ${{ secrets.GITHUB_TOKEN }}
+ ref: ${{ github.head_ref }} # Checkout the PR branch
- name: Install .NET Core
uses: actions/setup-dotnet@v4
@@ -40,6 +46,24 @@ jobs:
run: |
dotnet build ${{ env.Solution }} --nologo -v quiet -c ${{ matrix.configuration }}
+ - name: Generate Plugin Hashes
+ if: matrix.configuration == 'Release'
+ run: dotnet run --project src/PluginHashGenerator.Tool/PluginHashGenerator.Tool.csproj -- "bin/Release/" "src/PluginRegistry/PluginHashGenerator.Generated.cs" Release
+
+ - name: Commit Updated Hashes
+ if: matrix.configuration == 'Release'
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "github-actions[bot]@users.noreply.github.com"
+ git add src/PluginRegistry/PluginHashGenerator.Generated.cs
+ git diff --staged --quiet
+ if ($LASTEXITCODE -ne 0) {
+ git commit -m "chore: update plugin hashes [skip ci]"
+ git push
+ } else {
+ Write-Host "No changes to commit"
+ }
+
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
diff --git a/README.md b/README.md
index 618b889c..98c213fe 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@ This is a clone from (no longer exists)
## Overview
-LogExpert is a Windows tail program (a GUI replacement for the Unix tail command).
+LogExpert is a Windows feature rich tail program (a GUI replacement for the Unix tail command) with support for plugins, highlighting, filtering, bookmarking, columnizing and more.
Summary of (most) features:
diff --git a/build/_build.csproj b/build/_build.csproj
index dbc52a56..ef0b85be 100644
--- a/build/_build.csproj
+++ b/build/_build.csproj
@@ -12,12 +12,13 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers
+
diff --git a/src/AutoColumnizer/AutoColumnizer.cs b/src/AutoColumnizer/AutoColumnizer.cs
index bed59327..570381c9 100644
--- a/src/AutoColumnizer/AutoColumnizer.cs
+++ b/src/AutoColumnizer/AutoColumnizer.cs
@@ -1,7 +1,7 @@
-using LogExpert;
-
using System;
+using LogExpert;
+
namespace AutoColumnizer;
public class AutoColumnizer : ILogLineColumnizer
@@ -10,53 +10,53 @@ public class AutoColumnizer : ILogLineColumnizer
public string Text => GetName();
- public bool IsTimeshiftImplemented()
+ public bool IsTimeshiftImplemented ()
{
return true;
}
- public string GetName()
+ public string GetName ()
{
return "Auto Columnizer";
}
- public string GetDescription()
+ public string GetDescription ()
{
return "Automatically find the right columnizer for any file";
}
- public int GetColumnCount()
+ public int GetColumnCount ()
{
throw new NotImplementedException();
}
- public string[] GetColumnNames()
+ public string[] GetColumnNames ()
{
throw new NotImplementedException();
}
- public IColumnizedLogLine SplitLine(ILogLineColumnizerCallback callback, ILogLine line)
+ public IColumnizedLogLine SplitLine (ILogLineColumnizerCallback callback, ILogLine line)
{
throw new NotImplementedException();
}
- public void SetTimeOffset(int msecOffset)
+ public void SetTimeOffset (int msecOffset)
{
throw new NotImplementedException();
}
- public int GetTimeOffset()
+ public int GetTimeOffset ()
{
throw new NotImplementedException();
}
- public DateTime GetTimestamp(ILogLineColumnizerCallback callback, ILogLine line)
+ public DateTime GetTimestamp (ILogLineColumnizerCallback callback, ILogLine line)
{
throw new NotImplementedException();
}
- public void PushValue(ILogLineColumnizerCallback callback, int column, string value, string oldValue)
+ public void PushValue (ILogLineColumnizerCallback callback, int column, string value, string oldValue)
{
}
diff --git a/src/AutoColumnizer/AutoColumnizer.csproj b/src/AutoColumnizer/AutoColumnizer.csproj
index cb537385..8e2b2d9e 100644
--- a/src/AutoColumnizer/AutoColumnizer.csproj
+++ b/src/AutoColumnizer/AutoColumnizer.csproj
@@ -10,4 +10,10 @@
+
+
+ PreserveNewest
+
+
+
diff --git a/src/AutoColumnizer/AutoColumnizer.manifest.json b/src/AutoColumnizer/AutoColumnizer.manifest.json
new file mode 100644
index 00000000..a8d757da
--- /dev/null
+++ b/src/AutoColumnizer/AutoColumnizer.manifest.json
@@ -0,0 +1,19 @@
+{
+ "name": "AutoColumnizer",
+ "version": "1.0.0",
+ "author": "LogExpert Team",
+ "description": "Automatically detects and applies the appropriate columnizer for any log file format",
+ "apiVersion": "1.0",
+ "requires": {
+ "logExpert": ">=1.20.0",
+ "dotnet": "10.0"
+ },
+ "permissions": [
+ "filesystem:read",
+ "config:read"
+ ],
+ "dependencies": {},
+ "main": "AutoColumnizer.dll",
+ "url": "https://github.com/LogExperts/LogExpert",
+ "license": "MIT"
+}
diff --git a/src/ColumnizerLib/Column.cs b/src/ColumnizerLib/Column.cs
index 87bfdd69..4283e2df 100644
--- a/src/ColumnizerLib/Column.cs
+++ b/src/ColumnizerLib/Column.cs
@@ -1,7 +1,9 @@
using System;
using System.Collections.Generic;
-namespace LogExpert;
+using LogExpert;
+
+namespace ColumnizerLib;
public class Column : IColumn
{
diff --git a/src/ColumnizerLib/ILogExpertLogger.cs b/src/ColumnizerLib/ILogExpertLogger.cs
index cfbbd884..efc5467b 100644
--- a/src/ColumnizerLib/ILogExpertLogger.cs
+++ b/src/ColumnizerLib/ILogExpertLogger.cs
@@ -1,8 +1,3 @@
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Text;
-
namespace LogExpert;
///
@@ -17,7 +12,13 @@ public interface ILogExpertLogger
/// The logger in LogExpert will automatically add the class and the method name of the caller.
///
/// A message to be logged.
- void Info(string msg);
+ void Info (string msg);
+
+ ///
+ /// Writes an informational message using the specified format provider.
+ ///
+ /// An object that supplies culture-specific formatting information for the message. Cannot be null.
+ /// The informational message to write. Cannot be null.
void Info (IFormatProvider formatProvider, string msg);
///
@@ -25,21 +26,21 @@ public interface ILogExpertLogger
/// The logger in LogExpert will automatically add the class and the method name of the caller.
///
/// A message to be logged.
- void Debug(string msg);
+ void Debug (string msg);
///
/// Logs a message on WARN level to LogExpert#s log file. The logfile is only active in debug builds.
/// The logger in LogExpert will automatically add the class and the method name of the caller.
///
/// A message to be logged.
- void LogWarn(string msg);
+ void LogWarn (string msg);
///
/// Logs a message on ERROR level to LogExpert#s log file. The logfile is only active in debug builds.
/// The logger in LogExpert will automatically add the class and the method name of the caller.
///
/// A message to be logged.
- void LogError(string msg);
+ void LogError (string msg);
#endregion
}
\ No newline at end of file
diff --git a/src/ColumnizerLib/IPluginContext.cs b/src/ColumnizerLib/IPluginContext.cs
new file mode 100644
index 00000000..5d34795b
--- /dev/null
+++ b/src/ColumnizerLib/IPluginContext.cs
@@ -0,0 +1,28 @@
+namespace LogExpert;
+
+///
+/// Provides context information to plugins during initialization.
+///
+public interface IPluginContext
+{
+ ///
+ /// Logger for the plugin to use for diagnostic output.
+ ///
+ ILogExpertLogger Logger { get; }
+
+ ///
+ /// Directory where the plugin assembly is located.
+ ///
+ string PluginDirectory { get; }
+
+ ///
+ /// Version of the host application (LogExpert).
+ ///
+ Version HostVersion { get; }
+
+ ///
+ /// Directory where the plugin can store configuration files.
+ /// Typically %APPDATA%\LogExpert\Plugins\{PluginName}\
+ ///
+ string ConfigurationDirectory { get; }
+}
diff --git a/src/ColumnizerLib/IPluginLifecycle.cs b/src/ColumnizerLib/IPluginLifecycle.cs
new file mode 100644
index 00000000..51af0fa7
--- /dev/null
+++ b/src/ColumnizerLib/IPluginLifecycle.cs
@@ -0,0 +1,27 @@
+namespace LogExpert;
+
+///
+/// Defines lifecycle events for plugins.
+/// Plugins can optionally implement this interface to receive lifecycle notifications.
+///
+public interface IPluginLifecycle
+{
+ ///
+ /// Called when the plugin is first loaded.
+ /// Use this to initialize resources, load configuration, etc.
+ ///
+ /// Context providing information about the host environment
+ void Initialize (IPluginContext context);
+
+ ///
+ /// Called when the application is shutting down.
+ /// Use this to cleanup resources, save state, etc.
+ ///
+ void Shutdown ();
+
+ ///
+ /// Called when the plugin should reload its configuration.
+ /// Use this to refresh settings without restarting the application.
+ ///
+ void Reload ();
+}
\ No newline at end of file
diff --git a/src/CsvColumnizer/CsvColumnizer.cs b/src/CsvColumnizer/CsvColumnizer.cs
index c98eb515..1773d3ac 100644
--- a/src/CsvColumnizer/CsvColumnizer.cs
+++ b/src/CsvColumnizer/CsvColumnizer.cs
@@ -1,10 +1,7 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
using System.Reflection;
using System.Runtime.Versioning;
-using System.Windows.Forms;
+
+using ColumnizerLib;
using CsvHelper;
@@ -216,7 +213,7 @@ public void Configure (ILogLineColumnizerCallback callback, string configDir)
public void LoadConfig (string configDir)
{
- var configPath = Path.Combine(configDir, CONFIGFILENAME);
+ var configPath = Path.Join(configDir, CONFIGFILENAME);
if (!File.Exists(configPath))
{
diff --git a/src/CsvColumnizer/CsvColumnizer.csproj b/src/CsvColumnizer/CsvColumnizer.csproj
index bb1e079f..79b269fa 100644
--- a/src/CsvColumnizer/CsvColumnizer.csproj
+++ b/src/CsvColumnizer/CsvColumnizer.csproj
@@ -39,4 +39,10 @@
+
+
+ PreserveNewest
+
+
+
diff --git a/src/CsvColumnizer/CsvColumnizer.manifest.json b/src/CsvColumnizer/CsvColumnizer.manifest.json
new file mode 100644
index 00000000..4f08fad7
--- /dev/null
+++ b/src/CsvColumnizer/CsvColumnizer.manifest.json
@@ -0,0 +1,21 @@
+{
+ "name": "CsvColumnizer",
+ "version": "1.0.0",
+ "author": "LogExpert Team",
+ "description": "Parses CSV (Comma-Separated Values) log files into columns with configurable delimiters and quote characters",
+ "apiVersion": "1.0",
+ "requires": {
+ "logExpert": ">=1.10.0",
+ "dotnet": ">=8.0"
+ },
+ "permissions": [
+ "filesystem:read",
+ "config:read"
+ ],
+ "dependencies": {
+ "CsvHelper": "30.0.0"
+ },
+ "main": "CsvColumnizer.dll",
+ "url": "https://github.com/LogExperts/LogExpert",
+ "license": "MIT"
+}
diff --git a/src/DefaultPlugins/DefaultPlugins.manifest.json b/src/DefaultPlugins/DefaultPlugins.manifest.json
new file mode 100644
index 00000000..140e4b80
--- /dev/null
+++ b/src/DefaultPlugins/DefaultPlugins.manifest.json
@@ -0,0 +1,21 @@
+{
+ "name": "DefaultPlugins",
+ "version": "1.0.0",
+ "author": "LogExpert Team",
+ "description": "Collection of default plugins including Search, Highlight, and Action keyword handlers",
+ "apiVersion": "1.0",
+ "requires": {
+ "logExpert": ">=1.10.0",
+ "dotnet": ">=8.0"
+ },
+ "permissions": [
+ "filesystem:read",
+ "filesystem:write",
+ "config:read",
+ "network:connect"
+ ],
+ "dependencies": {},
+ "main": "DefaultPlugins.dll",
+ "url": "https://github.com/LogExperts/LogExpert",
+ "license": "MIT"
+}
diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props
index 100bf68d..d545af8d 100644
--- a/src/Directory.Packages.props
+++ b/src/Directory.Packages.props
@@ -14,6 +14,7 @@
+
diff --git a/src/FlashIconHighlighter/FlashIconHighlighter.manifest.json b/src/FlashIconHighlighter/FlashIconHighlighter.manifest.json
new file mode 100644
index 00000000..4ad2b1f6
--- /dev/null
+++ b/src/FlashIconHighlighter/FlashIconHighlighter.manifest.json
@@ -0,0 +1,18 @@
+{
+ "name": "FlashIconHighlighter",
+ "version": "1.0.0",
+ "author": "LogExpert Team",
+ "description": "Visual highlighter plugin that flashes the LogExpert icon when specific log patterns are detected",
+ "apiVersion": "1.0",
+ "requires": {
+ "logExpert": ">=1.10.0",
+ "dotnet": ">=8.0"
+ },
+ "permissions": [
+ "config:read"
+ ],
+ "dependencies": {},
+ "main": "FlashIconHighlighter.dll",
+ "url": "https://github.com/LogExperts/LogExpert",
+ "license": "MIT"
+}
diff --git a/src/GlassfishColumnizer/GlassfishColumnizer.cs b/src/GlassfishColumnizer/GlassfishColumnizer.cs
index c6afcde7..63737477 100644
--- a/src/GlassfishColumnizer/GlassfishColumnizer.cs
+++ b/src/GlassfishColumnizer/GlassfishColumnizer.cs
@@ -2,6 +2,8 @@
using System.Globalization;
using System.Linq;
+using ColumnizerLib;
+
using LogExpert;
namespace GlassfishColumnizer;
diff --git a/src/GlassfishColumnizer/GlassfishColumnizer.csproj b/src/GlassfishColumnizer/GlassfishColumnizer.csproj
index 3f0c708b..8701d704 100644
--- a/src/GlassfishColumnizer/GlassfishColumnizer.csproj
+++ b/src/GlassfishColumnizer/GlassfishColumnizer.csproj
@@ -11,4 +11,10 @@
+
+
+ PreserveNewest
+
+
+
diff --git a/src/GlassfishColumnizer/GlassfishColumnizer.manifest.json b/src/GlassfishColumnizer/GlassfishColumnizer.manifest.json
new file mode 100644
index 00000000..a4869b3f
--- /dev/null
+++ b/src/GlassfishColumnizer/GlassfishColumnizer.manifest.json
@@ -0,0 +1,19 @@
+{
+ "name": "GlassfishColumnizer",
+ "version": "1.0.0",
+ "author": "LogExpert Team",
+ "description": "Specialized columnizer for Glassfish application server log format",
+ "apiVersion": "1.0",
+ "requires": {
+ "logExpert": ">=1.10.0",
+ "dotnet": ">=8.0"
+ },
+ "permissions": [
+ "filesystem:read",
+ "config:read"
+ ],
+ "dependencies": {},
+ "main": "GlassfishColumnizer.dll",
+ "url": "https://github.com/LogExperts/LogExpert",
+ "license": "MIT"
+}
diff --git a/src/JsonColumnizer/JsonColumnizer.cs b/src/JsonColumnizer/JsonColumnizer.cs
index f702d7bf..8a4f1a05 100644
--- a/src/JsonColumnizer/JsonColumnizer.cs
+++ b/src/JsonColumnizer/JsonColumnizer.cs
@@ -1,3 +1,9 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+using ColumnizerLib;
+
using LogExpert;
using Newtonsoft.Json;
diff --git a/src/JsonColumnizer/JsonColumnizer.csproj b/src/JsonColumnizer/JsonColumnizer.csproj
index 8a882ff2..0f4742e7 100644
--- a/src/JsonColumnizer/JsonColumnizer.csproj
+++ b/src/JsonColumnizer/JsonColumnizer.csproj
@@ -14,4 +14,10 @@
+
+
+ PreserveNewest
+
+
+
diff --git a/src/JsonColumnizer/JsonColumnizer.manifest.json b/src/JsonColumnizer/JsonColumnizer.manifest.json
new file mode 100644
index 00000000..3bee7141
--- /dev/null
+++ b/src/JsonColumnizer/JsonColumnizer.manifest.json
@@ -0,0 +1,21 @@
+{
+ "name": "JsonColumnizer",
+ "version": "1.0.0",
+ "author": "LogExpert Team",
+ "description": "Parses JSON formatted log files, extracting properties as columns",
+ "apiVersion": "1.0",
+ "requires": {
+ "logExpert": ">=1.10.0",
+ "dotnet": ">=8.0"
+ },
+ "permissions": [
+ "filesystem:read",
+ "config:read"
+ ],
+ "dependencies": {
+ "Newtonsoft.Json": "13.0.0"
+ },
+ "main": "JsonColumnizer.dll",
+ "url": "https://github.com/LogExperts/LogExpert",
+ "license": "MIT"
+}
diff --git a/src/JsonCompactColumnizer/JsonCompactColumnizer.cs b/src/JsonCompactColumnizer/JsonCompactColumnizer.cs
index ce9f33b1..308c692d 100644
--- a/src/JsonCompactColumnizer/JsonCompactColumnizer.cs
+++ b/src/JsonCompactColumnizer/JsonCompactColumnizer.cs
@@ -1,6 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
+using ColumnizerLib;
using LogExpert;
diff --git a/src/JsonCompactColumnizer/JsonCompactColumnizer.csproj b/src/JsonCompactColumnizer/JsonCompactColumnizer.csproj
index e46da3ba..27c0180b 100644
--- a/src/JsonCompactColumnizer/JsonCompactColumnizer.csproj
+++ b/src/JsonCompactColumnizer/JsonCompactColumnizer.csproj
@@ -15,4 +15,10 @@
+
+
+
+ PreserveNewest
+
+
diff --git a/src/JsonCompactColumnizer/JsonCompactColumnizer.manifest.json b/src/JsonCompactColumnizer/JsonCompactColumnizer.manifest.json
new file mode 100644
index 00000000..b1260dbc
--- /dev/null
+++ b/src/JsonCompactColumnizer/JsonCompactColumnizer.manifest.json
@@ -0,0 +1,21 @@
+{
+ "name": "JsonCompactColumnizer",
+ "version": "1.0.0",
+ "author": "LogExpert Team",
+ "description": "Parses Serilog.Formatting.Compact JSON format log files with structured logging support",
+ "apiVersion": "1.0",
+ "requires": {
+ "logExpert": ">=1.10.0",
+ "dotnet": ">=8.0"
+ },
+ "permissions": [
+ "filesystem:read",
+ "config:read"
+ ],
+ "dependencies": {
+ "Newtonsoft.Json": "13.0.0"
+ },
+ "main": "JsonCompactColumnizer.dll",
+ "url": "https://github.com/LogExperts/LogExpert",
+ "license": "MIT"
+}
\ No newline at end of file
diff --git a/src/Log4jXmlColumnizer/Log4jXmlColumnizer.cs b/src/Log4jXmlColumnizer/Log4jXmlColumnizer.cs
index d003c648..422833dc 100644
--- a/src/Log4jXmlColumnizer/Log4jXmlColumnizer.cs
+++ b/src/Log4jXmlColumnizer/Log4jXmlColumnizer.cs
@@ -7,6 +7,8 @@
using System.Runtime.Versioning;
using System.Windows.Forms;
+using ColumnizerLib;
+
using LogExpert;
using Newtonsoft.Json;
diff --git a/src/Log4jXmlColumnizer/Log4jXmlColumnizer.csproj b/src/Log4jXmlColumnizer/Log4jXmlColumnizer.csproj
index 3598fe21..3aa73799 100644
--- a/src/Log4jXmlColumnizer/Log4jXmlColumnizer.csproj
+++ b/src/Log4jXmlColumnizer/Log4jXmlColumnizer.csproj
@@ -39,4 +39,10 @@
Resources.resx
+
+
+
+ PreserveNewest
+
+
diff --git a/src/Log4jXmlColumnizer/Log4jXmlColumnizer.manifest.json b/src/Log4jXmlColumnizer/Log4jXmlColumnizer.manifest.json
new file mode 100644
index 00000000..496e382b
--- /dev/null
+++ b/src/Log4jXmlColumnizer/Log4jXmlColumnizer.manifest.json
@@ -0,0 +1,19 @@
+{
+ "name": "Log4jXmlColumnizer",
+ "version": "1.0.0",
+ "author": "LogExpert Team",
+ "description": "Parses Log4j XML formatted log files with support for hierarchical log events",
+ "apiVersion": "1.0",
+ "requires": {
+ "logExpert": ">=1.10.0",
+ "dotnet": ">=8.0"
+ },
+ "permissions": [
+ "filesystem:read",
+ "config:read"
+ ],
+ "dependencies": {},
+ "main": "Log4jXmlColumnizer.dll",
+ "url": "https://github.com/LogExperts/LogExpert",
+ "license": "MIT"
+}
diff --git a/src/LogExpert.Core/Classes/Columnizer/ClfColumnizer.cs b/src/LogExpert.Core/Classes/Columnizer/ClfColumnizer.cs
index d2d07236..8a527c85 100644
--- a/src/LogExpert.Core/Classes/Columnizer/ClfColumnizer.cs
+++ b/src/LogExpert.Core/Classes/Columnizer/ClfColumnizer.cs
@@ -1,6 +1,8 @@
using System.Globalization;
using System.Text.RegularExpressions;
+using ColumnizerLib;
+
namespace LogExpert.Core.Classes.Columnizer;
public class ClfColumnizer : ILogLineColumnizer
diff --git a/src/LogExpert.Core/Classes/Columnizer/SquareBracketColumnizer.cs b/src/LogExpert.Core/Classes/Columnizer/SquareBracketColumnizer.cs
index 9dc4e342..730a30ec 100644
--- a/src/LogExpert.Core/Classes/Columnizer/SquareBracketColumnizer.cs
+++ b/src/LogExpert.Core/Classes/Columnizer/SquareBracketColumnizer.cs
@@ -1,7 +1,6 @@
-using System.Globalization;
using System.Text.RegularExpressions;
-using static LogExpert.Core.Classes.Columnizer.TimeFormatDeterminer;
+using ColumnizerLib;
namespace LogExpert.Core.Classes.Columnizer;
diff --git a/src/LogExpert.Core/Classes/Columnizer/TimestampColumnizer.cs b/src/LogExpert.Core/Classes/Columnizer/TimestampColumnizer.cs
index d65a7588..c5a82068 100644
--- a/src/LogExpert.Core/Classes/Columnizer/TimestampColumnizer.cs
+++ b/src/LogExpert.Core/Classes/Columnizer/TimestampColumnizer.cs
@@ -1,4 +1,4 @@
-using static LogExpert.Core.Classes.Columnizer.TimeFormatDeterminer;
+using ColumnizerLib;
namespace LogExpert.Core.Classes.Columnizer;
diff --git a/src/LogExpert.Core/Classes/IPC/LoadPayload.cs b/src/LogExpert.Core/Classes/IPC/LoadPayload.cs
index 80e3f114..ab5d7d94 100644
--- a/src/LogExpert.Core/Classes/IPC/LoadPayload.cs
+++ b/src/LogExpert.Core/Classes/IPC/LoadPayload.cs
@@ -1,6 +1,11 @@
-namespace LogExpert.Core.Classes.IPC;
+namespace LogExpert.Core.Classes.IPC;
public class LoadPayload
{
public List Files { get; set; } = [];
+
+ public override string? ToString ()
+ {
+ return string.Join(", ", Files);
+ }
}
diff --git a/src/LogExpert.Core/Classes/JsonConverters/ColumnizerJsonConverter.cs b/src/LogExpert.Core/Classes/JsonConverters/ColumnizerJsonConverter.cs
index 344fe37d..dc4d743b 100644
--- a/src/LogExpert.Core/Classes/JsonConverters/ColumnizerJsonConverter.cs
+++ b/src/LogExpert.Core/Classes/JsonConverters/ColumnizerJsonConverter.cs
@@ -1,3 +1,5 @@
+using System;
+using System.Linq;
using System.Reflection;
using LogExpert.Core.Classes.Attributes;
diff --git a/src/LogExpert.Core/Classes/JsonConverters/EncodingJsonConverter.cs b/src/LogExpert.Core/Classes/JsonConverters/EncodingJsonConverter.cs
index 764785b5..6d716de1 100644
--- a/src/LogExpert.Core/Classes/JsonConverters/EncodingJsonConverter.cs
+++ b/src/LogExpert.Core/Classes/JsonConverters/EncodingJsonConverter.cs
@@ -1,3 +1,4 @@
+using System;
using System.Text;
using Newtonsoft.Json;
diff --git a/src/LogExpert.Core/Entities/DefaultLogfileColumnizer.cs b/src/LogExpert.Core/Entities/DefaultLogfileColumnizer.cs
index ab955862..8191b926 100644
--- a/src/LogExpert.Core/Entities/DefaultLogfileColumnizer.cs
+++ b/src/LogExpert.Core/Entities/DefaultLogfileColumnizer.cs
@@ -1,30 +1,35 @@
-namespace LogExpert.Core.Entities;
+using System;
+using System.Collections.Generic;
+
+using ColumnizerLib;
+
+namespace LogExpert.Core.Entities;
public class DefaultLogfileColumnizer : ILogLineColumnizer
{
#region ILogLineColumnizer Members
- public string GetName()
+ public string GetName ()
{
return "Default (single line)";
}
- public string GetDescription()
+ public string GetDescription ()
{
return "No column splitting. The whole line is displayed in a single column.";
}
- public int GetColumnCount()
+ public int GetColumnCount ()
{
return 1;
}
- public string[] GetColumnNames()
+ public string[] GetColumnNames ()
{
return ["Text"];
}
- public IColumnizedLogLine SplitLine(ILogLineColumnizerCallback callback, ILogLine line)
+ public IColumnizedLogLine SplitLine (ILogLineColumnizerCallback callback, ILogLine line)
{
ColumnizedLogLine cLogLine = new()
{
@@ -46,7 +51,7 @@ public IColumnizedLogLine SplitLine(ILogLineColumnizerCallback callback, ILogLin
public string Text => GetName();
- public Priority GetPriority(string fileName, IEnumerable samples)
+ public Priority GetPriority (string fileName, IEnumerable samples)
{
return Priority.CanSupport;
}
@@ -54,27 +59,27 @@ public Priority GetPriority(string fileName, IEnumerable samples)
#region ILogLineColumnizer Not implemented Members
- public bool IsTimeshiftImplemented()
+ public bool IsTimeshiftImplemented ()
{
return false;
}
- public void SetTimeOffset(int msecOffset)
+ public void SetTimeOffset (int msecOffset)
{
throw new NotImplementedException();
}
- public int GetTimeOffset()
+ public int GetTimeOffset ()
{
throw new NotImplementedException();
}
- public DateTime GetTimestamp(ILogLineColumnizerCallback callback, ILogLine line)
+ public DateTime GetTimestamp (ILogLineColumnizerCallback callback, ILogLine line)
{
throw new NotImplementedException();
}
- public void PushValue(ILogLineColumnizerCallback callback, int column, string value, string oldValue)
+ public void PushValue (ILogLineColumnizerCallback callback, int column, string value, string oldValue)
{
}
diff --git a/src/LogExpert.Resources/Resources.Designer.cs b/src/LogExpert.Resources/Resources.Designer.cs
index c1d20914..6ac19211 100644
--- a/src/LogExpert.Resources/Resources.Designer.cs
+++ b/src/LogExpert.Resources/Resources.Designer.cs
@@ -1406,6 +1406,15 @@ public static string LogExpert_Common_UI_Button_OK {
}
}
+ ///
+ /// Looks up a localized string similar to &Save.
+ ///
+ public static string LogExpert_Common_UI_Button_Save {
+ get {
+ return ResourceManager.GetString("LogExpert_Common_UI_Button_Save", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Deserialize.
///
@@ -1625,6 +1634,15 @@ public static string LogTabWindow_UI_LogWindow_ToolTip_InvertMatch {
}
}
+ ///
+ /// Looks up a localized string similar to Main Menu.
+ ///
+ public static string LogTabWindow_UI_MenuStrip_MainMenu {
+ get {
+ return ResourceManager.GetString("LogTabWindow_UI_MenuStrip_MainMenu", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to menuStrip1.
///
@@ -1925,18 +1943,18 @@ public static string LogTabWindow_UI_ToolStripMenuItem_copyPathToClipboardToolSt
///
/// Looks up a localized string similar to Debug.
///
- public static string LogTabWindow_UI_ToolStripMenuItem_debugToolStripMenuItem {
+ public static string LogTabWindow_UI_ToolStripMenuItem_debugLogLevelToolStripMenuItem {
get {
- return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_debugToolStripMenuItem", resourceCulture);
+ return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_debugLogLevelToolStripMenuItem", resourceCulture);
}
}
///
/// Looks up a localized string similar to Debug.
///
- public static string LogTabWindow_UI_ToolStripMenuItem_debugToolStripMenuItem1 {
+ public static string LogTabWindow_UI_ToolStripMenuItem_debugToolStripMenuItem {
get {
- return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_debugToolStripMenuItem1", resourceCulture);
+ return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_debugToolStripMenuItem", resourceCulture);
}
}
@@ -2309,6 +2327,15 @@ public static string LogTabWindow_UI_ToolStripMenuItem_tabRenameToolStripMenuIte
}
}
+ ///
+ /// Looks up a localized string similar to Plugin &Trust Management....
+ ///
+ public static string LogTabWindow_UI_ToolStripMenuItem_Text_PluginTrustManagement {
+ get {
+ return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_Text_PluginTrustManagement", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Throw exception (background thread).
///
@@ -2473,6 +2500,15 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_openURIToolStripM
}
}
+ ///
+ /// Looks up a localized string similar to Manage trusted plugins and view plugin hashes.
+ ///
+ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_PluginTrustManagement {
+ get {
+ return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_ToolTip_PluginTrustManagement", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Save a session (all open tabs).
///
@@ -3866,6 +3902,405 @@ public static string PatternWindow_UI_Title {
}
}
+ ///
+ /// Looks up a localized string similar to &Close.
+ ///
+ public static string PluginHashDialog_UI_Button_Close {
+ get {
+ return ResourceManager.GetString("PluginHashDialog_UI_Button_Close", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to &Copy.
+ ///
+ public static string PluginHashDialog_UI_Button_Copy {
+ get {
+ return ResourceManager.GetString("PluginHashDialog_UI_Button_Copy", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SHA256 Hash:.
+ ///
+ public static string PluginHashDialog_UI_Label_Hash {
+ get {
+ return ResourceManager.GetString("PluginHashDialog_UI_Label_Hash", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin: {0}.
+ ///
+ public static string PluginHashDialog_UI_Label_PluginName {
+ get {
+ return ResourceManager.GetString("PluginHashDialog_UI_Label_PluginName", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Failed to copy hash: {0}.
+ ///
+ public static string PluginHashDialog_UI_Message_CopyError {
+ get {
+ return ResourceManager.GetString("PluginHashDialog_UI_Message_CopyError", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Hash copied to clipboard..
+ ///
+ public static string PluginHashDialog_UI_Message_CopySuccess {
+ get {
+ return ResourceManager.GetString("PluginHashDialog_UI_Message_CopySuccess", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Error.
+ ///
+ public static string PluginHashDialog_UI_Message_ErrorTitle {
+ get {
+ return ResourceManager.GetString("PluginHashDialog_UI_Message_ErrorTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Success.
+ ///
+ public static string PluginHashDialog_UI_Message_SuccessTitle {
+ get {
+ return ResourceManager.GetString("PluginHashDialog_UI_Message_SuccessTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin Hash.
+ ///
+ public static string PluginHashDialog_UI_Title {
+ get {
+ return ResourceManager.GetString("PluginHashDialog_UI_Title", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Failed to load plugin assembly (timeout or error).
+ ///
+ public static string PluginRegistry_PluginLoadingProgress_FailedToLoadPluginAssemblyTimeoutOrError {
+ get {
+ return ResourceManager.GetString("PluginRegistry_PluginLoadingProgress_FailedToLoadPluginAssemblyTimeoutOrError", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Failed validation (not trusted or invalid manifest).
+ ///
+ public static string PluginRegistry_PluginLoadingProgress_FailedValidationNotTrustedOrInvalidManifest {
+ get {
+ return ResourceManager.GetString("PluginRegistry_PluginLoadingProgress_FailedValidationNotTrustedOrInvalidManifest", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Loading plugin assembly.
+ ///
+ public static string PluginRegistry_PluginLoadingProgress_LoadingPluginAssembly {
+ get {
+ return ResourceManager.GetString("PluginRegistry_PluginLoadingProgress_LoadingPluginAssembly", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Validating plugin security and manifest.
+ ///
+ public static string PluginRegistry_PluginLoadingProgress_ValidatingPluginSecurityAndManifest {
+ get {
+ return ResourceManager.GetString("PluginRegistry_PluginLoadingProgress_ValidatingPluginSecurityAndManifest", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to &Add Plugin....
+ ///
+ public static string PluginTrustDialog_UI_Button_AddPlugin {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Button_AddPlugin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to &Remove.
+ ///
+ public static string PluginTrustDialog_UI_Button_Remove {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Button_Remove", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to &View Hash....
+ ///
+ public static string PluginTrustDialog_UI_Button_ViewHash {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Button_ViewHash", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Hash (Partial).
+ ///
+ public static string PluginTrustDialog_UI_Column_HashPartial {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Column_HashPartial", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Hash Verified.
+ ///
+ public static string PluginTrustDialog_UI_Column_HashVerified {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Column_HashVerified", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin Name.
+ ///
+ public static string PluginTrustDialog_UI_Column_PluginName {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Column_PluginName", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Status.
+ ///
+ public static string PluginTrustDialog_UI_Column_Status {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Column_Status", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin Files (*.dll)|*.dll|All Files (*.*)|*.*.
+ ///
+ public static string PluginTrustDialog_UI_FileDialog_Filter {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_FileDialog_Filter", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Select Plugin to Trust.
+ ///
+ public static string PluginTrustDialog_UI_FileDialog_Title {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_FileDialog_Title", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trusted Plugins.
+ ///
+ public static string PluginTrustDialog_UI_GroupBox_TrustedPlugins {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_GroupBox_TrustedPlugins", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Total Plugins: {0}.
+ ///
+ public static string PluginTrustDialog_UI_Label_TotalPlugins {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Label_TotalPlugins", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin ''{0}'' is already in the trusted list..
+ ///
+ public static string PluginTrustDialog_UI_Message_AlreadyTrusted {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_AlreadyTrusted", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Already Trusted.
+ ///
+ public static string PluginTrustDialog_UI_Message_AlreadyTrustedTitle {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_AlreadyTrustedTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Remove trust for plugin:
+ ///
+ ///{0}
+ ///
+ ///The plugin will not be loaded until re-added to the trusted list.
+ ///
+ ///Continue?.
+ ///
+ public static string PluginTrustDialog_UI_Message_ConfirmRemove {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_ConfirmRemove", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Confirm Removal.
+ ///
+ public static string PluginTrustDialog_UI_Message_ConfirmRemoveTitle {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_ConfirmRemoveTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trust plugin:
+ ///
+ ///Name: {0}
+ ///Path: {1}
+ ///Hash: {2}
+ ///
+ ///Do you want to trust this plugin?.
+ ///
+ public static string PluginTrustDialog_UI_Message_ConfirmTrust {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_ConfirmTrust", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Confirm Trust.
+ ///
+ public static string PluginTrustDialog_UI_Message_ConfirmTrustTitle {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_ConfirmTrustTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Error.
+ ///
+ public static string PluginTrustDialog_UI_Message_ErrorTitle {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_ErrorTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Error loading configuration: {0}.
+ ///
+ public static string PluginTrustDialog_UI_Message_LoadError {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_LoadError", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to No hash found for plugin: {0}.
+ ///
+ public static string PluginTrustDialog_UI_Message_NoHash {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_NoHash", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to No Hash.
+ ///
+ public static string PluginTrustDialog_UI_Message_NoHashTitle {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_NoHashTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Failed to save configuration:`n`n{0}.
+ ///
+ public static string PluginTrustDialog_UI_Message_SaveError {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_SaveError", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin trust configuration saved successfully..
+ ///
+ public static string PluginTrustDialog_UI_Message_SaveSuccess {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_SaveSuccess", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Success.
+ ///
+ public static string PluginTrustDialog_UI_Message_SuccessTitle {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_SuccessTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Configuration has been modified. Discard changes?.
+ ///
+ public static string PluginTrustDialog_UI_Message_UnsavedChanges {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_UnsavedChanges", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unsaved Changes.
+ ///
+ public static string PluginTrustDialog_UI_Message_UnsavedChangesTitle {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Message_UnsavedChangesTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Plugin Trust Management.
+ ///
+ public static string PluginTrustDialog_UI_Title {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Title", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to No.
+ ///
+ public static string PluginTrustDialog_UI_Value_No {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Value_No", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Trusted.
+ ///
+ public static string PluginTrustDialog_UI_Value_Trusted {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Value_Trusted", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Yes.
+ ///
+ public static string PluginTrustDialog_UI_Value_Yes {
+ get {
+ return ResourceManager.GetString("PluginTrustDialog_UI_Value_Yes", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
diff --git a/src/LogExpert.Resources/Resources.de.resx b/src/LogExpert.Resources/Resources.de.resx
index a9aa6dbc..cf780b35 100644
--- a/src/LogExpert.Resources/Resources.de.resx
+++ b/src/LogExpert.Resources/Resources.de.resx
@@ -1,6 +1,6 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
- images\png\48\Add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- Add
-
-
- images\png\48\ArrowDown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ArrowDown
-
-
- images\png\48\ArrowLeft.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\ArrowRight.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\ArrowUp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Arrow_menu_close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- Arrow_menu_close
-
-
- images\png\48\Arrow_menu_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- Arrow_menu_open
-
-
- images\png\48\Bookmarks.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Bookmark_add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Bookmark_added.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\bookmark_bubbles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Bookmark_manager.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Bookmark_remove.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Check_circle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Deceased.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Exit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Favorite.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\File_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Filter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Folder_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ images\png\48\Add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ Add
+
+
+ images\png\48\ArrowDown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ArrowDown
+
+
+ images\png\48\ArrowLeft.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\ArrowRight.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\ArrowUp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Arrow_menu_close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ Arrow_menu_close
+
+
+ images\png\48\Arrow_menu_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ Arrow_menu_open
+
+
+ images\png\48\Bookmarks.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Bookmark_add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Bookmark_added.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\bookmark_bubbles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Bookmark_manager.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Bookmark_remove.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Check_circle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Deceased.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Exit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Favorite.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\File_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Filter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Folder_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
LogExpert
-
- images\gif\LogLover.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- Logexpert Logo
-
-
+
+ images\gif\LogLover.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ Logexpert Logo
+
+
Konfigurationsdatei konnte nicht gefunden werden
-
- images\bmp\Pro_Filter.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Restart_alt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Search.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- images\png\48\Settings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- Settings Logo
-
-
- images\png\48\Star.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
+
+ images\bmp\Pro_Filter.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Restart_alt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Search.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ images\png\48\Settings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ Settings Logo
+
+
+ images\png\48\Star.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
LogExpert Fehler
-
+
Die Verbindung zur ersten Instanz kann nicht geöffnet werden: {0}
-
+
Einstellungen importiert
-
+
Einstellungen konnte nicht importiert werden: {0}
-
+
Exportieren der Einstellungen in eine Datei
-
+
Einstellungen (*.json)|*.json|Alle Dateien (*.*)
-
+
Kopie von
-
+
Neue Gruppe
-
+
Fehler während des Hinzufügens eines Highlighteintrages.
{0}
-
+
Die Regex ist "null" oder besteht nur aus Leerzeichen
-
+
[Default]
-
+
Während des Speichern des Highlighteintrages ist ein Fehler aufgetreten: {0}
-
+
Zeile
-
+
RmEndSession: {0}
-
+
Die Liste der Prozesse, die, die Ressource sperren, kann nicht angezeigt werden. Die Länge des Resultats konnte nicht gefunden werden.
-
+
Die Liste der Prozesse, die, die Ressource sperren, kann nicht angezeigt werden
-
+
Die Ressource kann nicht registriert werden.
-
+
Die Session konnte nicht neu gestartet werden. Die Dateisperre konnte nicht festgestellt werden.
-
+
Kein Prozess sperrt den angegebenen Pfad
-
+
->F
-
+
0
-
+
{0}->C
-
+
{0}->Clip
-
+
Löschen
-
+
In Tab filtern
-
+
Filter speichern
-
+
Suchen
-
+
Erweiterung anzeigen...
-
+
Starten des Filters
-
+
Automatisch verstecken
-
+
Regex
-
+
Sync
-
+
Ende Filtern
-
+
Match invertieren
-
+
Bereich durchsuchen
-
+
Rückstreuung
-
+
Vorwärtsstreuung
-
+
Fuzzyness
-
+
Spaltenname:
-
+
Spaltenamen
-
+
Text & Filter:
-
+
{0}
-
+
Datei wird geladen...
-
+
Laden {0}
-
+
Wirklich schließen?
-
+
Eingefroren
-
+
Erweiterung verstecken...
-
+
Erweiterung anzeigen...
-
+
Farbe...
-
+
Kopieren
-
+
Fehler in {0}: {1}
-
+
Spalten...
-
+
Spalten, für die Restriktion, auswählen
-
+
Ausgewählten Eintrag nach unten verschieben
-
+
Alle Tabs werden auf den selektierten Zeitstempel verschoben, sofern möglich
-
+
Verschiebe diese Spalte an die letzte Position
-
+
Verstecke diese Spalte
-
+
Kopieren der markierten Zeilen in einen neuen Tab
-
+
Editieren des Lesezeichenkommentars
-
+
Umschalter Lesezeichen
-
+
Zeitsynchronisierte Dateien
-
+
Temp Highlights
-
+
Den markierten Text als Lesezeichenkommentar setzen
-
+
Lesezeichen auf markierte Zeile setzen
-
+
Zur Spalte scrollen...
-
+
Alle Tabs zum aktuellen Zeitstempel scrollen
-
+
Spalten wiederherstellen
-
+
Alle entfernen
-
+
Verschieben zur letzten Spalte
-
+
Verschieben nach rechts
-
+
Verschieben nach links
-
+
Markiere die getroffenen Filter in der Loganzeige
-
+
Markier/Editier Modus
-
+
Markiere den derzeitigen Filterbereich
-
+
Alles permanent machen
-
+
Lokalisiere die gefilterten Zeilen in der originalen Datei
-
+
Markiere die Selektion in der Logdatei (Wörter Modus)
-
+
Markiere die Selektion in der Logdatei (Zeilen Modus)
-
+
Verstecke Spalte
-
+
Friere alle Spalten von der links markieren bis hier her
-
+
Befreie das Fenster von der Zeitsynchronisierung
-
+
Filtere in einen neuen Tab
-
+
Filter die Markierung
-
+
In einen neuen Tab kopieren
-
+
In die Zwischenablage kopieren
-
+
Lesezeichenkommentar...
-
+
An diesem Lesezeichen hängt ein Kommentar. Soll es wirklich gelöscht werden?
-
+
Wähle eine Datei, aus der die Lesezeichen geladen werden sollen
-
+
Wähle eine Datei, in die, die Lesezeichen gespeichert werden sollen
-
+
Es gibt einige Kommentare in den Lesezeichen. Sollen diese wirklich gelöscht werden?
-
+
Friere alle Spalten von der links markieren bis hier her ({0})
-
+
Schreiben der Temporären Datei.... ESC drücken um diesen Vorgang abzubrechen.
-
+
Unbekanntes Problem beim abschneiden der Datei
-
+
Abschneiden der Datei ist fehlgeschlagen: Datei ist gesperrt von {0}
-
+
Zeitdifferenz ist {0}
-
+
{0} ausgewählte Zeilen
-
+
Suche... ESC drücken um diesen Vorgang abzubrechen.
-
+
Filterung... ESC drücken um diesen Vorgang abzubrechen.
-
+
Filterzeit: {0} ms.
-
+
Datei nicht gefunden
-
+
Gestartet vom Ende der Datei
-
+
Gestartet vom Anfang der Datei
-
+
Nicht gefunden: {0}
-
+
Ungültige Regular Expression
-
+
Suchresultat nicht gefunden
-
+
Unbekannter Fehler beim Speichern der Persistenten Daten: {0}
-
+
Kann die Datei nicht laden
{0}
-
+
Doppelklick um den gespeicherten Filter zu laden
-
+
Fuzzy Suchlevel (0 = fuzzy aus)
-
+
Hinzufügen der nachfolgenden Zeilen zum Suchresultat (Nach ob/unten ziehen, Shift drücken für eine feiner Einstellung)
-
+
Hinzufügen der vorausfolgenden Zeilen zum Suchresultat (Nach ob/unten ziehen, Shift drücken für eine feiner Einstellung)
-
+
CSV Datei (*.csv)|*.csv|Lesezeichen Datei (*.bmk)|*.bmk
-
+
Ausnahmefehler während der Filterung. Bitte an den Entwickler weiterleiten:
{0}
{1}
-
+
Fehler während des Imports der Lesezeichenliste: {0}
-
+
Fehler während des Exports der Lesezeichenliste: {0}
-
+
zweiter Suchtext ('End Text') wenn ein Suchbereich benutzt wird
-
+
Suchtext für den Filter
-
+
Auswahl der Spalte zu der gesprungen werden soll
-
+
Aktiviere einen speziellen Suchmodus in welchem alles zwischen zwei gegebenen Suchtermen gefiltert wird.
-
+
Invertieren des Suchresultats
-
+
Filterung des Dateiendes (dadurch wird die Filteranzeige aktuelle gehalten, wenn Dateiänderungen stattfinden)
-
+
Synchronisierung der ausgewählten Zeile in der Filteranzeige zu der Zeile in der Loganzeige
-
+
Benutzen eines regulären Ausdrucks (rechts klick für den RegeEx-Helfer Dialog)
-
+
Sofortiges Filtern nachdem ein gespeicherter Filter geladen wurde
-
+
Macht den Filter Schreibempfindlich (Groß/Kleinschreibung wird beachtet)
-
+
Schränke die Suche auf die Spalten ein
-
+
Versteckt die Filterliste nachdem die Filter geladen wurden
-
+
Autostart
-
+
Groß-/Kleinschreibung
-
+
Spaltenrestriktion
-
+
Öffnen oder Schließen einer Liste mit gespeicherten Filter
-
+
Aktivieren/Deaktivieren der Erweiterten Filteranzeige
-
+
Verschiebe den selektierten Eintrag nach oben
-
+
Öffne einen neuen Tab mit dem gefilterten Bereich
-
+
Fehler während des Löschens der Filterliste: {0}
-
+
(Invertiere Match)
-
+
Spalten restriktion
-
+
Filter: {0} {1}{2}
-
+
Zwischenablage
-
+
Eingfügt am {0}
-
+
Unzureichende Rechte {0}: {1}
-
+
Fehler während {0} value {1}, min {2}, max {3}, visible {4}: {5}
-
+
linien
-
+
Linien:
-
+
->E
-
+
Das ist eine Test Fehlermeldung, geworfen durch einen Async Delegate
-
+
Das ist eine Test Fehlermeldung, geworfen durch einen Hintergrund Thread
-
+
LogExpert Session {0}
-
+
Das ist eine Test Fehlermeldung, geworfen durch den GUI Thread
-
+
Maximale Anzahl an Filtereinträge die angezeigt werden
-
+
Maximale Zeilenlänge (neustart benötigt)
-
+
! Ändern der Maximalen Zeilenlänge kann Probleme bei der Performance auslösen und sollte daher nicht durchgeführt werden !
-
+
Maximale Anzahl an Filtereinträgen
-
+
Default Encoding
-
+
Entfernen
-
+
Farbe...
-
+
Ändern...
-
+
Farbe...
-
+
Zeilen/Block
-
+
Anzahl an Blöcken
-
+
Schriftart
-
+
Datei Polling Interval (ms):
-
+
Änderungen treten nach dem nächsten Laden der Datei in Kraft
-
+
Pattern:
-
+
Maximale Tage:
-
+
Argumente:
-
+
Programm:
-
+
Columnizer für den Output:
-
+
Name:
-
+
Arbeitsverzeichnis:
-
+
...
-
+
...
-
+
...
-
+
&Ok
-
+
&Abbrechen
-
+
&Importieren...
-
+
Standard Dateinamen Pattern
-
+
Misc
-
+
Standards
-
+
Schriftart
-
+
Anzeige Modus
-
+
Tool Einstellungen
-
+
Speichern und wiederherstellen der Filter und Filtertabs
-
+
Automatisches Speichern der Persistierten Dateien (.lxp)
-
+
Applikationsstartupverzeichnis
-
+
Dateinamenmaske (Regex)
-
+
Dateinamenmaske (Regex)
-
+
Columnizer
-
+
Highlightgruppe
-
+
Einstellungen
-
+
Kopfname
-
+
Arbeitsverzeichnis auswählen
-
+
Einstellungen {0}|Alle Dateien {1}
-
+
Gleiches Verzeichnis wie die Logdatei
-
+
Einstellungen konnte nicht importiert werden: {0}
-
+
Meine Dokumente/LogExpert
-
+
Eigenes Verzeichnis
-
+
Plugins
-
+
Neues hinzufügen
-
+
Runter
-
+
Rauf
-
+
...
-
+
Behandle alle Dateien als Multidateien
-
+
Nachfragen wie sie zu behandeln sind
-
+
Vertikal
-
+
Horizontal
-
+
Vertikal invertiert
-
+
Zeitanzeige
-
+
Zeilenanzeige
-
+
Speicher/CPU
-
+
Lade jede Datei in einen separaten Tab
-
+
Peristierte Einstellungen
-
+
Multidatei
-
+
Highlight
-
+
Columnizers
-
+
Externe Tools
-
+
Zeitstempel Einstellungen
-
+
Anzeige Einstellungen
-
+
Multithreadfilter
-
+
Benutze den Legacydateiverarbeitung (langsam)
-
+
Exportiere die Einstellungen in eine Datei
-
+
Portierbarer Modus konnte nicht erstellt werden: {0}
-
+
Deaktiveren des portierbaren Modus
-
+
Aktiveren des portierbaren Modus
-
+
Wähle ein Verzeichnis für die LogExpert Sessiondateien
-
+
Langsamer dafür mehr kompatible mit unbekannten Zeilenfeeds und Encodings
-
+
Bei Aktivierung des Modus, wird die gespeicherte Datei aus dem Verzeichnis der Executable geladen
-
+
Encoding welches benutzt wird, wenn kein BOM Header oder keine persistierten Daten vorhanden sind.
-
+
Der Pfad der Executable und wo das Verzeichnis aus dem Programm gestartet wird.
-
+
Maske hat Priorität bevor Historie
-
+
Standard Mausdrag verhalten
-
+
Zeitstempelnavigationsdialog
-
+
Zeitstreuanzeige
-
+
Konfigurieren...
-
+
Löschen
-
+
Icon...
-
+
Exportieren...
-
+
Wenn multiple Dateien geöffnet werden...
-
+
Plugins
-
+
Einstellungen
-
+
Automatisch für neue Dateien auswählen
-
+
Pipe sysout zu Tab
-
+
Anzeigen des Zeitstempel Dialogs, sofern der Columnizer dieses unterstützt
-
+
Anzeigen Zeitstreudialog
-
+
Alpha rückwärts
-
+