Почему Log4Net не создает файл журнала на производстве? - PullRequest
10 голосов
/ 22 августа 2009

Я использую VS2005, проект веб-сайта, проект веб-развертывания и Log4Net. Я могу использовать ведение журнала, когда я развиваюсь локально. Я вижу файлы журналов, и все в порядке. Когда я создаю свой веб-сайт (используя проект веб-развертывания), я использую развертывание как один параметр DLL. Когда я проверяю, где должны быть мои файлы журналов, я не вижу никаких файлов.

Есть ли способ решить эту проблему. Я не думаю, что добавление значения отладки в настройки приложения поможет, потому что у меня нет консоли, потому что это веб-сайт.

EDIT Я не хочу, чтобы 150 представителей пропали даром в последний раз. Я сравнил внутреннюю трассировку от моей среды разработки с трассировкой от производства. Моя трассировка среды разработки показывает вызов Xml Configurator, а производственный - нет. У меня есть код в global.asax на методе application_start (). Я поместил туда отладочный код, и он вызывается в dev, но не в производстве.

Я думаю, что именно здесь проект веб-развертывания вызывает некоторые проблемы. Будет ли global.asax скомпилирован в одну DLL? Когда я делаю сборку в каталоге развертывания, я вижу файл global.compiled. Это должно пойти в папку bin в производстве? Или это код global.asax в одной DLL? Наличие обоих в папке bin или просто DLL ничего не изменило.

Ответы [ 9 ]

7 голосов
/ 22 августа 2009

Имеет ли рабочий процесс достаточно прав для записи в каталог журналов? Я предполагаю, что это не так. Возможно, вы захотите дать группе рабочих процессов права на запись в каталог и посмотреть, решит ли это вашу проблему.

4 голосов
/ 17 июня 2010

Добавьте это в файл AssemblyInfo.cs и отметьте

[assembly: log4net.Config.XmlConfigurator(Watch=true)]
3 голосов
/ 30 августа 2009

Я нашел проблему. Разрешения были ПРАВИЛЬНЫ. Оказывается, что при использовании проекта веб-развертывания также создается файл precompliled.config в корневом каталоге. Я не копировал это в производственную среду. Как только это было во всем, работало. Извините, никто не получил награду.

2 голосов
/ 29 августа 2009

Похоже, корень вашей проблемы в том, что событие Application_Start в global.asax не запускается.

Существует «известная» проблема при развертывании из VS 2005 в Windows 2003, из-за которой Application_Start не запускается.

Содержимое Global.asax.cs будет скомпилировано в dll. Но Application_Start не запустится, если не присутствует файл Global.asax.

Вот пара соответствующих ссылок:

http://accidentaltechnologist.com/asp-net/application_start-not-firing-and-the-globalasax/

http://www.velocityreviews.com/forums/t300292-web-deployment-projects-globalasax-problem.html

Есть несколько других возможностей, которые описаны в приведенных выше ссылках.

Надеюсь, это поможет

Шираз

1 голос
/ 22 августа 2009

Это случалось со мной раньше, и у пользователя ASPNET были права на создание файлов, где это необходимо. Можете проверить, есть ли что-нибудь в журнале событий Windows, указывающее это?

Чтобы проверить, какие вещи (мы наблюдаем за наблюдателем!), Мы выводим, где должна работать log4net, записывая это, используя OutputDebugString () через pinvoke. . Мы также включили это в попытку, чтобы убедиться, что мы обнаруживаем ошибки, связанные с этим, поскольку очень важно использовать для правильной регистрации.

0 голосов
/ 02 октября 2018

Fixed. Добавьте пользователя (который запускал рабочий процесс IIS) с правами «запись» в «Свойства -> Безопасность -> Редактировать» для папки проекта, в которой должен быть создан файл «Журнал».

0 голосов
/ 24 августа 2009

чтобы убедиться, что log4net настроен правильно, я создаю UDP Appender, который регистрирует на порт 9090. Я использую бензопилу http://logging.apache.org/chainsaw/index.html для проверки записей журнала.

с этим вы можете проверить, что, по крайней мере, некоторые записи журнала сделаны и что регистратор работает.

UDP Appender Config

<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
        <remoteAddress value="localhost" />
        <remotePort value="9090" />
        <layout type="log4net.Layout.XmlLayoutSchemaLog4j">
            <locationInfo value="true" />
        </layout>
</appender>

бензопила XML

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">    
    <plugin name="LocalReceiver" class="org.apache.log4j.net.UDPReceiver">
        <param name="Port" value="9090" />
    </plugin>    
</log4j:configuration>
0 голосов
/ 22 августа 2009

Убедитесь, что log4net get настроен правильно. Может быть, dll в порядке, но файл конфигурации отсутствует? log4net может быть там, но просто не имеет активных добавителей.

0 голосов
/ 22 августа 2009

Проверьте разрешения для ожидаемого выходного каталога и убедитесь, что веб-сервис может писать в него. Самый простой способ сделать это - запустить filemon.exe (приложение SysInternals) и соответствующим образом ограничить его. Это должно сказать вам, если что-то не получается, и вы можете исправить при необходимости

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...