myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Wie erstellt mir mein Custom Logger pro Tag eine neue Datei?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie erstellt mir mein Custom Logger pro Tag eine neue Datei?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
blizzard blizzard ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.02.2020
Beiträge: 20


blizzard ist offline

Wie erstellt mir mein Custom Logger pro Tag eine neue Datei?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo ich habe ein kleines problem mit meiner log klasse.

vorab erst mal das script

C#-Code:
using System;
using System.IO;
using System.Net;
using System.Windows.Forms;

namespace Zensiert ( sorry )
{
    public abstract class LogBase
    {
        public abstract void Log(string Message);
    }





    public class Logger : LogBase
    {

        private String CurrentDirectory
        {
            get;
            set;
        }

        private String FileName
        {
            get;
            set;
        }

        private String FilePath
        {
            get;
            set;
        }
        string displayTime()
        {
            string time = null;
            string date = null;
            string timedate = null;

            time += DateTime.Now.Hour + ".";
            time += DateTime.Now.Minute + ".";
            time += DateTime.Now.Second;

            date += DateTime.Now.Day + ".";
            date += DateTime.Now.Month + ".";
            date += DateTime.Now.Year;

            timedate = time + "  " + date;

            return timedate;
        }

        public void create()
        {
            this.FilePath = this.CurrentDirectory + "/Logs/";

            if (!Directory.Exists(FilePath))
            {
                Directory.CreateDirectory(FilePath);
            }
        }


        public Logger()
        {

            Random zufall = new Random();
            int number = zufall.Next(1, 100);

            string Username = Properties.Settings.Default.ClientRegisterUsername;
            string date = DateTime.Now.ToLongDateString();
            string time = DateTime.Now.ToLongTimeString();

            this.CurrentDirectory = Directory.GetCurrentDirectory();
            this.FileName = Properties.Settings.Default.ClientRegisterUsername + number + ".log";

            this.FilePath = this.CurrentDirectory + "/Logs/" + displayTime().ToString() + " - " + this.FileName;

        }



        public override void Log(string Message)
        {

            string Username = Properties.Settings.Default.ClientRegisterUsername;
            string Password = Properties.Settings.Default.ClientRegisterPassword;
            string RegisterCode = Properties.Settings.Default.ClientRegisterCode;
            string IPv4Address = Properties.Settings.Default.ClientIPv4Address;


            //Console.WriteLine("Logged : {0}", logusername, Message);

            using (StreamWriter w = File.AppendText(this.FilePath))
            {
                w.Write("\r\nLog Eintrag : ");
                w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
                w.WriteLine("  :{0}", Message + " " + "|| - IPv4Adresse:  " + IPv4Address);
                w.WriteLine("-----------------------------------------------");
            }

            WebClient cl = new WebClient();
            try
            {

                cl.UploadFile("https://Sub.Domain.de/adau1p3lo4a2dd.php", FilePath);


            }

#pragma warning disable CS0168
            catch (Exception e)
#pragma warning restore CS0168
            {
                MessageBox.Show("Fehler");
            }

            string Pfad = this.CurrentDirectory + "/Logs/";
            DirectoryInfo di = new DirectoryInfo(Pfad);
            FileInfo[] files_log = di.GetFiles(".log");

            for (int i = 0; i < files_log.Length; i++)
                files_log[i].Delete();



        }
    }
}

Ich würde mir gerne ein script kleines script schreiben was mir alle vorgegebenen ausführungen der nutzer loggt. dieses funktioniert soweit auch ganz gut. die datei wird erstell und die logs werden eingetragen.

Jetzt habe ich aber das problem das die datei egal was ich mache im namen selbst die uhrzeit nicht ändert sonder immer ( z.b 1.44.8 21.6.2020 - Benutzer ) stehn bleibt und dort die daten rein schreibt. anstatt immer eine neue datei zu erstellen.

irgendwas übersehe ich da aber ich weiß einfach nicht was.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von blizzard am 21.06.2020 02:06.

Neuer Beitrag 21.06.2020 02:00 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.599
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Je nachdem wie du deinen Logger instanzierst und verwendest, wird es sich auch nicht ändern.
Den der Dateiname wird bei dir einmalig im Konstruktor ermittelt.
Wenn du die Instanz dann wieder verwendest, wird auch immer der selbe Name verwendet.

Für das Thema Logging gibt es mit log4net schon eine fertige Lösung.
Bitte nutzt diese und versuch nicht das Rad neu zu erfinden.
Auch kannst du dir bei deiner displayTime Methode das String gewurste sparen.
DateTime bietet mit ToString auch die Möglichkeit an, das Format für die Ausgabe vorzugeben.
Dadurch sparst du dir das rumgewussel mit den time/date Strings.
Da du hier jedes mal neue Strings erzeugst, kann auch die Zeit bei einem Wechsel fehlerhafte Strings erzeugen.

Deshalb solltest du aus deinem DateTime.Now auch immer einen String erzeugen.
Oder die aktuelle Zeit einmalig in einer lokalen Variable speichern, sonst liefert dir jeder Aufruf immer die aktuelle Zeit.

Ansonsten solltest du dich an die generellen Code Guidelines halten.
Methoden werden in C# immer mit einem Großbuchstaben begonnen.
Auch bin ich nicht sicher, ob du als aktuellen Pfad auf Directory.GetCurrentDirector() zugreifen willst.
Je nach Ausführungspfad, legst du dann in irgendwelchen Verzeichnissen deine Logs ab.
I.d.R. legt man Logs in Ordner für die Anwendungsdaten (AppData) ab.
Dazu musst du mal einen Blick auf die SpecialFolders in C# werfen.

Ebenfalls solltest du die Finger vom WebClient lassen, der ist obsolete.
Nimm den Httpclient, der ist der aktuelle Weg.
Ich weiß aber nicht, welchen Sinn es hat bei jedem Log Vorgang einen Upload durchzuführen.
Dadurch hast du auch gleich Konflikte, wenn viel geloggt wird.

Hier sollte der Upload erst erfolgen, wenn sichergestellt ist, dass keiner mehr in die Datei schreibt.
Am besten sollte der Upload beim beenden der Anwendung erfolgen.

T-Virus

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am 21.06.2020 02:20.

Neuer Beitrag 21.06.2020 02:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.211
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Sowas nennt sich Tracing.
Dafür gibts fertige Frameworks wie zB Serilog. Keine Notwendigkeit das Rad neu zu erfinden.

PS: Aktionen von Benutzern loggen ist rechtlich in Deutschland (bzw. der EU) problematisch.
In Unternehmen müssen die Benutzer darüber informiert werden, was, wie und warum geloggt wird - und zwar detailliert.
In Firmen mit Betriebsräten muss dieser solche Mechanismen zustimmen.

Besondere Sorgfalt unterliegst Du bei der Verarbeitung personenbezogener Informationen wie Benutzername, Uhrzeiten, IP Adressen etc...
IP Adressen darfst Du zB nicht ohne Zugriffschutz (zB verschlüsselt) loggen und bist rechtlich verpflichtet diese nach einer gewissen Zeit (ja nachdem, was Du unterliegst - zB 7 Tagen bei dynamischen IP Adressen) zu löschen.

Rechtliche Verletzungen bei sowas sind extrem teuer - und das ist gut so.
Einer dieser Verletzungen ist, dass Du das gesamte Logging unverschlüsselt überträgst.

Basics:PS: da es sich hier nur im ein Logikfehler handelt, kannst Du das eigentlich relativ schnell mit  [Artikel] Debugger: Wie verwende ich den von Visual Studio? selbst ermitteln.
Neuer Beitrag 21.06.2020 10:51 Beiträge des Benutzers | zu Buddylist hinzufügen
blizzard blizzard ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.02.2020
Beiträge: 20

Themenstarter Thema begonnen von blizzard

blizzard ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke hab es gelöst bekommen ;)
Neuer Beitrag 24.06.2020 17:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Coffeebean Coffeebean ist männlich
myCSharp.de-Team

avatar-3295.gif


Dabei seit: 25.08.2011
Beiträge: 2.202
Entwicklungsumgebung: VS 2005-2017, VS Code
Herkunft: Deutschland/Schweiz


Coffeebean ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo blizzard,

Zitat:
Danke hab es gelöst bekommen ;)

Das ist prima, kannst du uns und den Problemsuchenden nach dir noch sagen, wie du das gelöst hast?

Gruss

Fabian
Neuer Beitrag 28.06.2020 15:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 3 Monate.
Der letzte Beitrag ist älter als 3 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 30.09.2020 07:21