Jump to content
sergiofer

Ficheiro LOG

Recommended Posts

sergiofer

Boa noite a todos

Estou a tentar criar uma class para fazer um Log da minha aplicação.

A ideia é poder enviar informações para um ficheiro, de modo a poder fazer uma analise do funcionamento da minha aplicação.

Tenho o seguinte código:

Public Class Log_Class
    Public Busy As New Object

    Public Function AddLog(ByVal Modbus_Func As String, ByVal Resultado As String)

        Dim OutFile As IO.FileStream
        Dim Writer As IO.StreamWriter

        Dim LineValue As String

        Dim Agora As DateTime = DateTime.Now
        Dim Hora As String = ""

        'While Busy
        '    Threading.Thread.Sleep(10)

        'End While
        SyncLock (Busy)

            Hora = Agora.Hour.ToString + ":" + Agora.Minute.ToString + ":" + Agora.Second.ToString + ":" + Agora.Millisecond.ToString

            'Writer
            OutFile = New IO.FileStream("Log.txt", IO.FileMode.Append, IO.FileAccess.Write)
            Writer = New IO.StreamWriter(OutFile)

            LineValue = Hora + " - " + Modbus_Func + ": " + Resultado

            Writer.WriteLine(LineValue)
            Writer.Close()

        End SyncLock

        Return True

    End Function


End Class

Depois declaro a class em dois backgrounds workers, e envio informação para o ficheiro LOG. O problema, é que tenho um erro a dizer que o ficheiro está a ser usado por outro processo. Penso que o Synclock deveria resolver isso, mas aparentemente não está a funcionar.

Alguém tem alguma sugestão para tentar resolver isto, ou então alguma outra ideia de como fazer o ficheiro LOG.

Obrigado

Sérgio Fernandes

Share this post


Link to post
Share on other sites
Caça

Se estas a usar MultiThreading isso pode acontecer uma vez que poder estar mais do que um Thread a aceder ao ficheiro ao mesmo tempo.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
sergiofer

Sim, mas o Synclock não deveria evitar isso?

Pelo que li, ele deveria deixar executar apenas uma instância do código de cada vez, ou percebi mal?

Sérgio

Share this post


Link to post
Share on other sites
renafi

Eu ia sugerir uma coisa mais simples: normalmente tens stress quando deixas o object filestream aberto. Experimenta fazer OutFile.Close() logo a seguir ao Writer.Close().


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Share this post


Link to post
Share on other sites
sergiofer

Pelo que percebi o problema está no objecto Busy que sincroniza.

Como cada classe tem o seu, o lock não faz efeito.

Experimenta colocar a variavel Busy como static.

Experimentei como static e não consegui. Depois experimentei passar a class para Module, com a variavel Busy como Static, e funcionou.

Alguém tem ideia de como posso fazer com que a class também funcione.


Eu ia sugerir uma coisa mais simples: normalmente tens stress quando deixas o object filestream aberto. Experimenta fazer OutFile.Close() logo a seguir ao Writer.Close().

Experimentei e continua a fazer o mesmo. Penso que isto tem a ver com o facto da class estar instanciada 2 vezes, e objecto synclock não estar a funcionar correctamente.

Não estou a conseguir perceber porque o synclock não está a funcionar na class, mas se colocar num Module funciona.

Sérgio

Share this post


Link to post
Share on other sites
sergiofer

Ja consegui por a funcionar.

Para isso tive que declarar o objecto Busy como shared

Obrigado a todos

Sérgio

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.