log4net и "с пробой" F # - PullRequest
       16

log4net и "с пробой" F #

1 голос
/ 23 февраля 2012

Я использую log4net в попытке с выражением, и он не работает.Я думаю, что-то не хватает, но я не знаю что.Вот мой код:

let clusterIDArray = try
                         myfunction
                     with
                         log.Fatal("my function is not working")   


log.Debug("my function is working")

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 23 февраля 2012

В вашем фрагменте кода есть две ошибки:

  • Вы не выполнили свою функцию. Я полагаю, что вы выполнили это в своем реальном коде; дело в том, чтобы придумать пример.
  • Вы не перехватили исключения, или ваш блок try...with... не синтаксически правильный.

Если предположить, что мы перехватываем исключения и возвращаем массив в любом случае, более логичным способом регистрации может быть:

let clusterIDArray =
    try
       let result = myfunction args // Assume args are arguments declared before
       log.Debug("my function is working")
       result
    with 
    | ex ->
       // ex is of type exception which can be parsed by log4net
       log.Fatal("my function is not working: ", ex)   
       [||]
3 голосов
/ 23 февраля 2012

Трудно сказать, не зная, что такое myfunction, но, как вы написали, код на самом деле не запускает функцию.Он просто возвращает его как значение (из блока try .. with) и присваивает его значению clusterIDArray, поэтому код никогда не выдаст.

Если функция принимает только аргумент unit, выВы можете вызвать его внутри блока try .. with следующим образом (если он принимает некоторые аргументы, вам нужно передать их функции внутри блока):другие отметили, что синтаксис with e недействителен.Вам нужно написать with e -> или with _ ->, если вы хотите игнорировать исключение.

...