Διαδρομές
/
Elixir
Elixir
/
Ασκήσεις
/
Επίπεδο καταγραφής
Επίπεδο καταγραφής

Επίπεδο καταγραφής

Άσκηση εκμάθησης

Εισαγωγή

Atoms

Ο τύπος atom της Elixir αντιπροσωπεύει μια σταθερή τιμή. Η τιμή ενός atom είναι απλώς το όνομά του. Αυτό μας δίνει έναν ασφαλή ως προς τους τύπους τρόπο να αλληλεπιδρούμε με δεδομένα. Τα atom μπορούν να οριστούν ως εξής:

# All atoms are preceded with a ':' then follow with alphanumeric snake-cased characters
variable = :an_atom

Τα atom αναπαρίστανται εσωτερικά από έναν ακέραιο σε έναν πίνακα αναζήτησης, τα οποία ορίζονται αυτόματα. Δεν είναι δυνατό να αλλάξεις αυτή την εσωτερική τιμή.

Cond

Συχνά θέλουμε να γράψουμε κώδικα που να διακλαδώνεται με βάση μια συνθήκη. Αν και υπάρχουν πολλοί τρόποι να το κάνεις αυτό στην Elixir, ένας από τους απλούστερους είναι να χρησιμοποιήσεις το cond/1.

Στην απλούστερη μορφή του, το cond ακολουθεί το πρώτο μονοπάτι που αξιολογείται ως true με μία ή περισσότερες διακλαδώσεις:

cond do
  x > 10 -> :this_might_be_the_way
  y < 7 -> :or_that_might_be_the_way
  true -> :this_is_the_default_way
end

Αν κανένα μονοπάτι δεν αξιολογείται ως true, το runtime πετάει ένα σφάλμα.

Οδηγίες

Διαχειρίζεσαι ένα σύστημα που αποτελείται από μερικές εφαρμογές οι οποίες παράγουν πολλά logs. Θέλεις να γράψεις ένα μικρό πρόγραμμα που θα συγκεντρώνει αυτά τα logs και θα τους δίνει ετικέτες ανάλογα με το επίπεδο σοβαρότητάς τους. Όλες οι εφαρμογές στο σύστημά σου χρησιμοποιούν τους ίδιους κωδικούς log, αλλά μερικές από τις παλιές εφαρμογές δεν υποστηρίζουν όλους τους κωδικούς.

Κωδικός log Ετικέτα log Υποστηρίζεται σε παλιές εφαρμογές;
0 trace όχι
1 debug ναι
2 info ναι
3 warning ναι
4 error ναι
5 fatal όχι
άλλο / μη υποστηριζόμενο unknown -

1. Προσδιόρισε την ετικέτα του log

Υλοποίησε τη συνάρτηση LogLevel.to_label/2. Θα πρέπει να δέχεται έναν ακέραιο κωδικό και μια Boolean (λογική τιμή) που σου λέει αν το log προέρχεται από παλιά εφαρμογή, και να επιστρέφει την ετικέτα μιας γραμμής log ως atom.

Οι κωδικοί log που δεν αναφέρονται στον πίνακα θα πρέπει να επιστρέφουν ετικέτα unknown. Οι κωδικοί log που στον πίνακα εμφανίζονται ως μη υποστηριζόμενοι σε παλιές εφαρμογές θα πρέπει επίσης να επιστρέφουν ετικέτα unknown αν το log προέρχεται από παλιά εφαρμογή.

LogLevel.to_label(0, false)
# => :trace

LogLevel.to_label(0, true)
# => :unknown

2. Στείλε μια ειδοποίηση

Κάποιος πρέπει να ειδοποιείται όταν συμβαίνουν απρόσμενα πράγματα.

Υλοποίησε τη συνάρτηση LogLevel.alert_recipient/2 για να προσδιορίσεις σε ποιον πρέπει να σταλεί η ειδοποίηση. Η συνάρτηση θα πρέπει να δέχεται έναν ακέραιο κωδικό και μια Boolean τιμή που σου λέει αν το log προέρχεται από παλιά εφαρμογή, και να επιστρέφει το όνομα του παραλήπτη ως atom.

Χρησιμοποίησε τη συνάρτηση LogLevel.to_label/2 από την προηγούμενη εργασία. Αν η ετικέτα του log είναι error ή fatal, στείλε την ειδοποίηση στην ομάδα ops. Αν λάβεις ένα log με ετικέτα unknown από παλιό σύστημα, στείλε την ειδοποίηση στην ομάδα dev1, ενώ οι άλλες ετικέτες unknown θα πρέπει να στέλνονται στην ομάδα dev2. Όλες οι υπόλοιπες ετικέτες log μπορούν να αγνοηθούν με ασφάλεια επιστρέφοντας false.

LogLevel.alert_recipient(-1, true)
# => :dev1

LogLevel.alert_recipient(0, false)
# => false
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Elixir Exercism

Έτοιμος να ξεκινήσεις την άσκηση Επίπεδο καταγραφής;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Elixir με 58 έννοιες168 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.