{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff}] [{Level:u3}] {Message:lj}{NewLine}{Exception}"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "Logs/filemonitor-.log",
          "rollingInterval": "Day",
          "outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff}] [{Level:u3}] {Message:lj}{NewLine}{Exception}",
          "retainedFileCountLimit": 31
        }
      }
    ],
    "Enrich": [ "FromLogContext" ]
  },
  "FileMonitorConfig": {
    "General": {
      "EnableFileFiltering": true,
      "MemoryMonitorIntervalMinutes": 1,
      "DefaultMonitorPath": "D:\\MonitorFiles"
    },
    "FileFilters": {
      "AllowedExtensions": [ ".dll" ],
      "ExcludedDirectories": [ "bin", "obj", "node_modules" ],
      "IncludeSubdirectories": true
    },
    "Performance": {
      "MemoryCleanupThreshold": 5000,
      "ChannelCapacity": 1000,
      "EventDebounceTimeSeconds": 3,
      "MaxDictionarySize": 10000,
      "CleanupIntervalSeconds": 5,
      "ProcessingDelayMs": 5
    },
    "Robustness": {
      "EnableAutoRecovery": true,
      "WatcherHealthCheckIntervalSeconds": 30,
      "WatcherTimeoutSeconds": 60,
      "MaxRestartAttempts": 3,
      "RestartDelaySeconds": 5,
      "EnableFileLockDetection": true,
      "LockedFileStrategy": "Retry",
      "FileLockRetryCount": 3,
      "FileLockRetryDelayMs": 500
    },
    "EventStorage": {
      "EnableEventStorage": true,
      "StorageType": "SQLite",
      "StorageDirectory": "D:/EventLogs",
      "DatabasePath": "D:/EventLogs/events.db",
      "ConnectionString": "Data Source=D:/EventLogs/events.db;Foreign Keys=True",
      "CommandTimeout": 30,
      "LogFileNameFormat": "FileEvents_{0:yyyy-MM-dd}.json",
      "StorageIntervalSeconds": 60,
      "BatchSize": 100,
      "MaxEventRecords": 100000,
      "DataRetentionDays": 30,
      "MaxLogFiles": 30,
      "CompressLogFiles": true,
      "EnableEventReplay": true,
      "ReplayIntervalMs": 100,
      "ReplaySpeedFactor": 1.0
    },
    "NotifyFilters": [
      "LastWrite",
      "FileName",
      "DirectoryName",
      "CreationTime"
    ],
    "Logging": {
      "LogLevel": "Information"
    }
  }
}
