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!!!
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
(clé, log) => log.Async(a => a.File(new CompactJsonFormatter(),
Path.Combine(pathPrefix, $"{key.Item1:yyyy-MM}/ {key.Item2} -.txt"),
rollingInterval : RollingInterval.Day)),
évierMapCountLimit : 1)
Commentaire le plus utile
Avec l'emballage tuple, c'est très bien. Merci!!
.WriteTo.Map((new DateTime(le.Timestamp.Year, le.Timestamp.Month, le.Timestamp.Day), le.Level) ,
le => nouveau Tuple
(clé, log) => log.Async(a => a.File(new CompactJsonFormatter(),
Path.Combine(pathPrefix, $"{key.Item1:yyyy-MM}/ {key.Item2} -.txt"),
rollingInterval : RollingInterval.Day)),
évierMapCountLimit : 1)