Serilog: Vous voulez que le journal de texte divise les dossiers par mois!!

Créé le 27 févr. 2020  ·  4Commentaires  ·  Source: serilog/serilog

Salut j'ai un besoin,

Le mode de fichier de sortie veut ajouter un dossier dynamique。
Par exemple, par mois

d:/logs/project-a/2020-01/log202010011.txt
d:/logs/project-a/2020-02/log202020001.txt
d:/logs/project-a/2020-03/log20203001.txt

La mise en œuvre peut-elle être rappelée ?
tel que

.WriteTo.File( () => $"{DateTime.Now.ToString("yyyy-MM")}/Debug-.txt" , rollingInterval : RollingInterval.Day)

Parce que nous avons notre propre plan pour nettoyer les journaux, nous voulons diviser les dossiers par mois

Merci!!!

Commentaire le plus utile

Avec l'emballage tuple, c'est très bien. Merci!!

.WriteTo.Map(
le => nouveau Tuple(new DateTime(le.Timestamp.Year, le.Timestamp.Month, le.Timestamp.Day), le.Level) ,
(clé, log) => log.Async(a => a.File(new CompactJsonFormatter(),
Path.Combine(pathPrefix, $"{key.Item1:yyyy-MM}/ {key.Item2} -.txt"),
rollingInterval : RollingInterval.Day)),
évierMapCountLimit : 1)

Tous les 4 commentaires

Salut! Essayez d'installer _Serilog.Sinks.Map_ et d'utiliser :

.WriteTo.Map(
  le => new DateTime(le.Timestamp,Year, le.Timestamp.Month, le.Timestamp.Day),
  (month, wt) => wt.File($"{month:yyyy-MM}/log-.txt", rollingInterval: RollingInterval.Day),
  sinkMapCountLimit: 1)

OK peut être utilisé.

Puis-je obtenir le niveau de journalisation sur la carte ? De cette façon, une seule configuration est nécessaire. Sinon, il faut l'écrire plusieurs fois

tel que

.WriteTo.Map(
le => new DateTime(le.Horodatage.Année, le.Horodatage.Mois, le.Horodatage.Jour),
(mois, log) => log.Async(a => a.File(new CompactJsonFormatter(),
Path.Combine(pathPrefix, $"{month:yyyy-MM}/ {le.Level?} -.txt"),
rollingInterval : RollingInterval.Day)),
évierMapCountLimit : 1)

Comment obtenir {log.

Écrivez-le maintenant plusieurs fois, la seule différence est la partie niveau :

.WriteTo.Map(
le => new DateTime(le.Horodatage.Année, le.Horodatage.Mois, le.Horodatage.Jour),
(mois, journal) => log.Logger(lg => lg.Filter.ByInclusionOnly(p => p.Level == LogEventLevel. Debug )
.WriteTo.Async(a => a.File(new CompactJsonFormatter(),
Path.Combine(pathPrefix, $"{month:yyyy-MM}/ Debug -.txt"),
rollingInterval : RollingInterval.Day))),
évierMapCountLimit : 1)

.WriteTo.Map(
le => new DateTime(le.Horodatage.Année, le.Horodatage.Mois, le.Horodatage.Jour),
(mois, journal) => log.Logger(lg => lg.Filter.ByInclusionOnly(p => p.Level == LogEventLevel. Information )
.WriteTo.Async(a => a.File(new CompactJsonFormatter(),
Path.Combine(pathPrefix, $"{month:yyyy-MM}/ Information -.txt"),
rollingInterval : RollingInterval.Day))),
évierMapCountLimit : 1)

.WriteTo.Map(
le => new DateTime(le.Horodatage.Année, le.Horodatage.Mois, le.Horodatage.Jour),
(mois, journal) => log.Logger(lg => lg.Filter.ByInclusionOnly(p => p.Level == LogEventLevel. Error )
.WriteTo.Async(a => a.File(new CompactJsonFormatter(),
Path.Combine(pathPrefix, $"{month:yyyy-MM}/ Error -.txt"),
rollingInterval : RollingInterval.Day))),
évierMapCountLimit : 1)

le est un LogEvent , qui contient un niveau (mais je n'en connais rien sur le puits Map donc je ne peux pas dire si vous pouvez l'utiliser de cette façon). La réponse se trouve dans la source des surcharges de configuration - une contrainte limitedToMinLevel pourrait avoir plus de sens ?

Avec l'emballage tuple, c'est très bien. Merci!!

.WriteTo.Map(
le => nouveau Tuple(new DateTime(le.Timestamp.Year, le.Timestamp.Month, le.Timestamp.Day), le.Level) ,
(clé, log) => log.Async(a => a.File(new CompactJsonFormatter(),
Path.Combine(pathPrefix, $"{key.Item1:yyyy-MM}/ {key.Item2} -.txt"),
rollingInterval : RollingInterval.Day)),
évierMapCountLimit : 1)

Cette page vous a été utile?
0 / 5 - 0 notes