VRChatのログを解析して,過去に訪問したワールドや交流したユーザーを記録するツール
rioil / vrchatlifelog Goto Github PK
View Code? Open in Web Editor NEWVRChatのログからJoin/Leave履歴を記録するツール
License: MIT License
VRChatのログからJoin/Leave履歴を記録するツール
License: MIT License
破損した履歴の自動修復処理が実行されていません.
DBやログファイルの保存ディレクトリを開くメニューを追加します.
VRChat起動直後はログファイルが作成されていないため,誤ったファイルを監視してしまい,監視するべきファイルが飛ばされてしまうことがある.
ワールド名右クリックでワールドへのリンクを取得したい
ログファイル管理処理のリファクタリングを行います.
オプション設定画面の初期表示位置を設定します.
画面でロケーションを選択しても入退出履歴が表示されないことがあります.
出力されたログ
2022-12-01 18:37:27.4583 [Info] Reading C:\Users\rio\AppData\LocalLow\VRChat\VRChat\output_log_07-25-12.txt...
2022-12-01 18:37:27.7878 [Info] Watching file changed to C:\Users\rio\AppData\LocalLow\VRChat\VRChat\output_log_2022-12-01_18-01-39.txt
2022-12-01 18:37:27.7878 [Info] Starting log directory watching...
2022-12-01 18:37:27.7878 [Info] Log directory watching started
2022-12-01 18:37:27.9018 [Debug] Hosting started
2022-12-01 22:26:31.1522 [Info] New log file created : C:\Users\rio\AppData\LocalLow\VRChat\VRChat\output_log_2022-12-01_22-26-31.txt
2022-12-01 22:26:31.1522 [Info] Watching file changed to C:\Users\rio\AppData\LocalLow\VRChat\VRChat\output_log_2022-12-01_22-26-31.txt
2022-12-01 22:26:31.1522 [Info] New log file created : C:\Users\rio\AppData\LocalLow\VRChat\VRChat\output_log_2022-12-01_22-26-31.txt
2022-12-01 22:26:31.1522 [Info] Watching file changed to C:\Users\rio\AppData\LocalLow\VRChat\VRChat\output_log_2022-12-01_22-26-31.txt
2022-12-01 22:46:35.3401 [Error] CurrentDomain_UnhandledException System.NullReferenceException: Object reference not set to an instance of an object.
at VRChatLogWathcer.Models.LogWathcerService.<>c__DisplayClass27_0.<<ChangeWatchingFile>b__0>d.MoveNext() in D:\rio\dev\C#\VRChatLifelog\VRChatLogWathcer\Models\LogWathcerService.cs:line 320
--- End of stack trace from previous location ---
at VRChatLogWathcer.Models.LogWathcerService.StopLogFileWatching() in D:\rio\dev\C#\VRChatLifelog\VRChatLogWathcer\Models\LogWathcerService.cs:line 374
at VRChatLogWathcer.Models.LogWathcerService.ChangeWatchingFile(String filePath) in D:\rio\dev\C#\VRChatLifelog\VRChatLogWathcer\Models\LogWathcerService.cs:line 317
at VRChatLogWathcer.Models.LogWathcerService.OnFileCreated(String fileFullPath) in D:\rio\dev\C#\VRChatLifelog\VRChatLogWathcer\Models\LogWathcerService.cs:line 186
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_1(Object state)
at System.Threading.QueueUserWorkItemCallback.<>c.<.cctor>b__6_0(QueueUserWorkItemCallback quwi)
at System.Threading.ExecutionContext.RunForThreadPoolUnsafe[TState](ExecutionContext executionContext, Action`1 callback, TState& state)
at System.Threading.QueueUserWorkItemCallback.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
.NET 6 から.NET 8に移行します.
#12 では複数ロケーションで取られた写真を表示するためにsearch-msファイルを利用しています.
search-msスキーマでの最大クエリ長は超えることが出来ますが,search-msファイルにも条件数の制限があると思われます.
制限について調査し,制限の緩和方法があれば対応します.
インスタンスJoinログを認識するための正規表現パターンが間違っているため,ログが正しく記録されていません.
この不具合が存在する状態でPublicインスタンスにJoinしたログは,ワールド名以外の情報が直近に滞在していたPublicインスタンス以外の情報になってしまっています.
プロジェクトでCOM参照を使用するように変更したため,dotnet buildが失敗して単体テストが実行されなくなっています.
大量の履歴が該当する絞り込みを行うとUIが10秒程度固まります.
絞り込み処理を実行したときに例外が発生することがあります.
- 日時を指定して絞り込み
- 表示されたインスタンスのどれかを選択
- 選択中のインスタンスを右クリックして,そのワールドで絞り込み
- プレイヤーのどれかを選択
- 選択中のプレイヤーを右クリックして,そのプレイヤーで絞り込み
プレイヤーで絞り込みを行うだけ
2024-04-12 08:23:00.5380 [Error] Dispatcher_UnhandledException System.InvalidOperationException: The source 'IQueryable' doesn't implement 'IAsyncEnumerable<VRChatLifelog.Data.LocationHistory>'. Only sources that implement 'IAsyncEnumerable' can be used for Entity Framework asynchronous operations.
at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsAsyncEnumerable[TSource](IQueryable`1 source)
at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToArrayAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken)
at VRChatLifelog.ViewModels.MainWindowViewModel.ApplyFilter() in D:\rio\dev\CSharp\VRChatLifelog\VRChatLifelog\ViewModels\MainWindowViewModel.cs:line 213
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
既存ファイル読み取り中に,VRChatの起動によって古いファイルが削除されると例外が発生します
2022-05-17 07:22:29.3449 [Error] error occurred System.IO.FileNotFoundException: Could not find file 'C:\Users\rio\AppData\LocalLow\VRChat\VRChat\output_log_22-40-44.txt'.
File name: 'C:\Users\rio\AppData\LocalLow\VRChat\VRChat\output_log_22-40-44.txt'
at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
at VRChatLogWathcer.Models.LogWathcerService.ReadLogFile(String path) in D:\rio\dev\C#\VRChatLifelog\VRChatLogWathcer\Models\LogWathcerService.cs:line 220
at VRChatLogWathcer.Models.LogWathcerService.<StartLogFileWatching>b__21_2(String path) in D:\rio\dev\C#\VRChatLifelog\VRChatLogWathcer\Models\LogWathcerService.cs:line 290
at VRChatLogWathcer.Extensions.IEnumerableExtensions.ForEach[T](IEnumerable`1 items, Action`1 action) in D:\rio\dev\C#\VRChatLifelog\VRChatLogWathcer\Extensions\IEnumerableExtensions.cs:line 15
at VRChatLogWathcer.Models.LogWathcerService.StartLogFileWatching() in D:\rio\dev\C#\VRChatLifelog\VRChatLogWathcer\Models\LogWathcerService.cs:line 290
at VRChatLogWathcer.Models.LogWathcerService.ExecuteAsync(CancellationToken stoppingToken) in D:\rio\dev\C#\VRChatLifelog\VRChatLogWathcer\Models\LogWathcerService.cs:line 88
at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
at VRChatLogWathcer.App.OnStartup(StartupEventArgs e) in D:\rio\dev\C#\VRChatLifelog\VRChatLogWathcer\App.xaml.cs:line 71
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.Run()
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run()
at VRChatLogWathcer.App.Main() in D:\rio\dev\C#\VRChatLifelog\VRChatLogWathcer\App.xaml.cs:line 31
ユーザー名を指定して,そのユーザーが写っている可能性がある写真の一覧を表示する機能を追加します.
実行ファイルの名前をVRChatLifelog.exeに変更します.
ユーザー名による検索機能に加えて,ワールド名による検索機能を追加します.
日付以外の条件のみで絞り込みを行った場合に日付順でソートされません.
Join/Leave履歴のLeftが正しく記録されていないことがあります.
P/Invokeで,DllImport属性に代わってLibraryImport属性を使用するように変更します.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.