Avatar billede koppelgaard Praktikant
10. december 2009 - 23:11 Der er 13 kommentarer og
2 løsninger

flere tråde tilgår samme fil

Under opbygningen af et projekt har jeg brug for at logge hvilke metoder der kører hvornår. Dette medfører at flere tråde gerne vil tilgå samme fil på een gang - hvordan styre jeg det?

Michael
Avatar billede arne_v Ekspert
10. december 2009 - 23:23 #1
Holder filen aaben mellem kald og bruger synchronized til at sikre dig mod at to traade forsoeger at skrive samtidigt.
Avatar billede janus_007 Nybegynder
10. december 2009 - 23:23 #2
Skriv det til Message Queue :)

Men ellers kig på http://nlog-project.org/home , jeg tror den kan klare det, men ellers må du jo lave den som singleton.
Avatar billede arne_v Ekspert
10. december 2009 - 23:24 #3
Hvis du er smart eller doven, saa bruger du et eksisterende log framework som f.eks. log4net.
Avatar billede jbh Nybegynder
11. december 2009 - 10:16 #4
Lav en lille klasse, der "administrerer" adgangen til filen og som arne skriver så marker de metoder, der skriver/læser fra filen som synchronized.
Avatar billede koppelgaard Praktikant
11. december 2009 - 10:24 #5
Arne_v og jbh:
"synchronized", der er jeg desværre ikke med - men vil gerne lære!!

Arne_v:
log4net, der er jeg desværre heller ikke med?

Er det i retning af :
System.Diagnostics.Debug.WriteLine(txt);

Janus_007:
Message Queue, kunne du give et eksempel?

Singleton:
Lavede denne her tidlige til at logge exceptions, men synes ikke lige at det virkede, men måske jeg bare skulle prøve igen??

using System;
using System.IO;

namespace Ksat
{
    public sealed class ExceptionLogger
    {
        static ExceptionLogger instance = null;
        static readonly object padlock = new object();
        string path = @"C:\Documents and Settings\All Users\Documents\Ksat\e.txt";
        ExceptionLogger()  {}
        public static ExceptionLogger Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new ExceptionLogger();
                    }
                    return instance;
                }
            }
        }


        public  void logExceptionToFile(Exception ex)
        {
           
            try
            {
                Console.Beep(50, 200);
                lock (this)
                {

                    StreamWriter w = new StreamWriter(path, true);
                    w.WriteLine(DateTime.Now.ToLongTimeString() + ": \n" + ex.ToString() + "\n");
                    w.Close();
                }
            }
            catch { }       
        }         
    }
}
Avatar billede jbh Nybegynder
11. december 2009 - 10:36 #6
Hov. Syncronized er jo Java'sk. :-) I C# hedder det lock, men er det samme og det er jo, hvad du har gjort i din logExceptionToFile metode.

Det burde være fint, hvis du har sikret dig, at det er det eneste sted du skriver til filen. Du bør også lave en lock på samme objekt når du læser fra filen.
Avatar billede koppelgaard Praktikant
11. december 2009 - 10:43 #7
Jamen så prøve jeg igen. Vender tilbage.
Men vil dog stadig gerne have et eksempel på Message Queue
Avatar billede arne_v Ekspert
11. december 2009 - 15:15 #8
Ja - synchronized hedder lock i C#.

log4net er http://logging.apache.org/log4net/index.html
Avatar billede janus_007 Nybegynder
11. december 2009 - 23:40 #9
åhh nej ikke mere log4net, det er forældet! Det hedder nLog nu til dags *SS*
Avatar billede koppelgaard Praktikant
11. december 2009 - 23:50 #10
øhh jeg er tungnem og stadig ikke med på, hvad nLog eller log4net er, og hvordan det bruges?

Michael
Avatar billede staever Nybegynder
14. december 2009 - 22:59 #11
Jeg ville nok lave en hovedklasse, og en nedarvet klasse, hvor så den nedarvede klasse styrede tilgangen til filen og havde en "indbygget" kø. På den måde kan du også senere udbygge med muligheden for log via Event-loggen osv. På den måde kommer du samtidig også udover at du skal vente på at processer kan låse for hinanden. Dog opstår muligheden også for at du kan miste log-data hvis programmet går ned inden du for skrevet det hele.
Avatar billede koppelgaard Praktikant
15. december 2009 - 13:15 #12
tak skal du have.
Sender I alle point - så deler jeg pointene ud:-)
Michael
Avatar billede arne_v Ekspert
10. januar 2010 - 04:37 #13
svar fra mig
Avatar billede staever Nybegynder
10. januar 2010 - 12:05 #14
svar
Avatar billede koppelgaard Praktikant
11. januar 2010 - 08:20 #15
Så har alle vist haft chancen for svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester