2011-09-07 25 views
9

Tôi đã cấu hình một đối tượng tập tin cho NLog như sau:Làm thế nào tôi có thể truy vấn đường dẫn đến tệp nhật ký NLog?

<targets> 
    <target name="asyncFile" xsi:type="AsyncWrapper"> 
    <target xsi:type="File" name="logfile" fileName="${basedir}/Logs/${shortdate}.log" 
      layout="${longdate} ${uppercase:${level}} ${message}" /> 
    </target>  
</targets> 

Làm thế nào tôi có thể truy vấn con đường hệ thống tập tin thực tế (fileName) của mục tiêu File này qua API NLog không?

+0

yêu cầu của bạn là gì? Tại sao bạn cần phải biết con đường? – ccellar

+3

@ckeller Thật thú vị vì tôi không nhất thiết phải biết '$ {basedir}' đánh giá là gì. – aknuds1

Trả lời

8

Tôi vừa cố gắng lấy thông tin này qua số configuration api.

enter image description here

Đáng buồn là nó trông giống như cấu hình được đánh giá bởi các mục tiêu thực tế và không được giải quyết trong cấu hình.

{basedir} đề cập đến thư mục cơ sở appdomain, bạn có thể chỉ cần đọc giá trị này một mình.

var basedirPath = AppDomain.CurrentDomain.BaseDirectory; 
0

Bạn có thể sử dụng api bên trong mã thay vì tệp cấu hình xml. Sau đó, trong ứng dụng của bạn, bạn gán đường dẫn tệp của nhật ký cho một biến và sử dụng biến đó làm tên tệp của đích. Bạn có thể truy cập biến đó, HOẶC thay đổi nó bất cứ lúc nào bạn thích (đoạn mã của tôi, ở đây, được định nghĩa bên trong một lớp).

Private MainNlogConfig As New LoggingConfiguration() 
Dim localrule As New LoggingRule(*, LogLevel.Info, locallogtarget) 
MainNlogConfig..AddTarget("file", locallogtarget) 

With locallogtarget 
    .Layout = "${longdate} ${logger} ${message}" 
    .FileName = appdir & appName & ".log" '----->LOOK HERE! 
End With 
LogManager.Configuration = MainNlogConfig 
8
private string GetLogFile() 
    { 
     var fileTarget = LogManager.Configuration.AllTargets.FirstOrDefault(t => t is FileTarget) as FileTarget; 
     return fileTarget == null ? string.Empty : fileTarget.FileName.Render(new LogEventInfo { Level = LogLevel.Info }); 
    } 
Các vấn đề liên quan