So I had to write an application that read the logs from other applications.
Something so simple, yet couldn’t find a solution I was happy with.
Still not 100% happy with it because if multiple lines are written at the same time it would only get the last line written.

But here is what I came up with.

Imports System.IO

Public Class LogMonitor
    Private WithEvents watch__1 As FileSystemWatcher = New FileSystemWatcher()
    Public Event NewLineReceived(Data As String, FileName As String)

    Public Sub New(Dir As String, Optional Filter As String = "*.*")
        watch__1.Path = Dir
        watch__1.Filter = Filter
        watch__1.NotifyFilter = NotifyFilters.LastWrite
        watch__1.EnableRaisingEvents = True
    End Sub

    Private Sub watch__1_Changed(sender As Object, e As FileSystemEventArgs) Handles watch__1.Changed
        Try

            Dim strChangedText As String = GetLastLine(e.FullPath)
            RaiseEvent NewLineReceived(strChangedText, e.FullPath)

            watch__1.EnableRaisingEvents = False
        Finally
            watch__1.EnableRaisingEvents = True
        End Try

    End Sub

    Public Function GetLastLine(filepath As String) As String

        Dim SR As New StreamReader(File.Open(filepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        Dim LastLine As String

        Do
            LastLine = SR.ReadLine
        Loop While SR.EndOfStream = False

        SR.Close()
        Return LastLine

    End Function
End Class