asp.net

log4net – prosty setup

Posted on

Bibliotekę log4net pobieramy z pomoc Nugeta.

W web.config dodajemy sekcje o log4net do <configSections> oraz konfigurujemy logowanie do pliku “logs\Log.txt”.

<configuration>
   <configSections>
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
   </configSections>
  <log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <param name="File" value="logs\Log.txt" />
      <param name="AppendToFile" value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="LogFileAppender" />
    </root>
  </log4net>
</configuration>

W miejscu gdzie startuje nasz framework (np. Application_Start() w Global.asax, Bootstrapper.ApplicationStartup() dla Nancy) umieszczamy

// Remember about this line
XmlConfigurator.Configure();

// Just check out
ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
logger.Info("Starting");

Często zapomina się o XmlConfigurator.Configure();

Jest to setup minimum, aby tylko zadziałało. Oczywiście polecam się bawić innymi ustawieniami log4neta.

Poprawny sposób na czytanie pliku w ASP.NET

Posted on Updated on

// path to App_Data
string appData = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();

Komentarze:
– This is the most “correct” way of getting it.
– Because it’s not hardcoding the “App_Data” string. That can change in the future versions, or be different in Mono etc. etc.
Źródło: http://stackoverflow.com/questions/1268738/asp-net-mvc-find-absolute-path-to-the-app-data-folder-from-controller

Idąć dalej za linkami w z powyższego źródła trafiam na Getting The Location of App_Data Folder gdzie autor całego zamieszania pisze:

Unfortunately we cannot (or should not) use this kind of code since it is a dirty hack that relies on internal implementation of some internal classes and it also requires us to hard-code a string. So what’s the benefit? The only one is that now I’m pretty sure, that there is no way to interact with App_Data folder using BCL so I will no longer have to search for it on the Internet – thing that I have done countless times.

Może więc w związku z powyższym pozostać przy standardowym:

string path = HttpContext.Current.Server.MapPath("~/App_Data");

Znalazłem miejsce gdzie AppDomain.CurrentDomain.GetData(“DataDirectory”) ma przewagę. Korzystam mianowicie z innego hacka aby mieć jakby scheduled job Easy Background Tasks in ASP.NET, wtedy HttpContect.Current jest nullem.

ASP.NET: skąd ten dziwny kod w przeglądarce? WTF?

Posted on

Znalazłem w repozytorium commit o enigmatycznej treści WTF. W tym commicie jedyna zmiana to spacja w pustej linijce. Rzeczywiście WTF oddaje zdziwienie developera w momencie gdy to commitował (i mu to pomogło, bo by nie commitował).

Chodzi o to że ASP.NET czasem cache’uje i wisi na starszej wersji pliku widoku (*.aspx, *.ascx, *.cshtml). Nie powinno się tak dziać, ale jednak tak bywa. (Ta funkcjonalność to chyba ASP.NET Dynamic Compilation, jest ona poza tematem wpisu)

Moje najszybsze rozwiązanie

Najszybsze rozwiązanie to ta wymieniona spacja i zapisanie pliku. Zaraz po tym polecam od razu zrobić Ctrl+Z i jeszcze raz zachować – takie spacje nieczyszczone od razu lądują potem w repozytorium.

Można wykonać C:\>iisreset, można też wyczyścić Temporary ASP.NET files.