@using Newtonsoft.Json @using StardewModdingAPI.Web.Framework.LogParsing.Models @model StardewModdingAPI.Web.ViewModels.LogParserModel @{ ViewData["Title"] = "SMAPI log parser"; IDictionary contentPacks = Model.GetContentPacksByMod(); IDictionary defaultFilters = Enum .GetValues(typeof(LogLevel)) .Cast() .ToDictionary(level => level.ToString().ToLower(), level => level != LogLevel.Trace); JsonSerializerSettings noFormatting = new JsonSerializerSettings { Formatting = Formatting.None }; } @section Head { @if (Model.PasteID != null) { } } @* upload result banner *@ @if (Model.UploadError != null) { } else if (Model.ParseError != null) { } else if (Model.ParsedLog?.IsValid == true) { } @* upload new log *@ @if (Model.ParsedLog == null) {

Where do I find my SMAPI log?

What system do you use?
On Linux:
  1. Open the Files app.
  2. Click the options menu (might be labeled Go or ).
  3. Choose Enter Location.
  4. Enter this exact text:
    ~/.config/StardewValley/ErrorLogs
  5. The log file is SMAPI-crash.txt if it exists, otherwise SMAPI-latest.txt.
On Mac:
  1. Open the Finder app.
  2. Click Go at the top, then Go to Folder.
  3. Enter this exact text:
    ~/.config/StardewValley/ErrorLogs
  4. The log file is SMAPI-crash.txt if it exists, otherwise SMAPI-latest.txt.
On Windows:
  1. Press the Windows and R buttons at the same time.
  2. In the 'run' box that appears, enter this exact text:
    %appdata%\StardewValley\ErrorLogs
  3. The log file is SMAPI-crash.txt if it exists, otherwise SMAPI-latest.txt.

How do I share my log?

  1. Drag the file onto this textbox (or paste the text in):
  2. Click this button:
  3. On the new page, copy the URL and send it to the person helping you.
} @* parsed log *@ @if (Model.ParsedLog?.IsValid == true) {

Log info

Game info:
Stardew Valley: @Model.ParsedLog.GameVersion on @Model.ParsedLog.OperatingSystem
SMAPI: @Model.ParsedLog.ApiVersion
Folder: @Model.ParsedLog.GamePath
Log started: @Model.ParsedLog.Timestamp.UtcDateTime.ToString("yyyy-MM-dd HH:mm") UTC ({{localTimeStarted}} your time)

@foreach (var mod in Model.ParsedLog.Mods.Where(p => p.ContentPackFor == null)) { @if (mod.Errors == 0) { } else if (mod.Errors == 1) { } else { } }
Installed mods: @if (!Model.ShowRaw) { click any mod to filter show all hide all }
@mod.Name @mod.Version @if (contentPacks != null && contentPacks.TryGetValue(mod.Name, out LogModInfo[] contentPackList)) {
@foreach (var contentPack in contentPackList) { + @contentPack.Name @contentPack.Version
}
}
@mod.Author @if (contentPacks != null && contentPacks.TryGetValue(mod.Name, out contentPackList)) {
@foreach (var contentPack in contentPackList) { + @contentPack.Author
}
}
no errors@mod.Errors error@mod.Errors errors
@if (!Model.ShowRaw) {
Filter messages: TRACE | DEBUG | INFO | ALERT | WARN | ERROR
@foreach (var message in Model.ParsedLog.Messages) { string levelStr = message.Level.ToString().ToLower(); if (message.Repeated > 0) { } }
@message.Time @message.Level.ToString().ToUpper() @message.Mod @message.Text
repeats [@message.Repeated] times.
view raw log } else {
@Model.ParsedLog.RawText
view parsed log }
} else if (Model.ParsedLog?.IsValid == false) {

Raw log

@Model.ParsedLog.RawText
}