Как настроить мой log4j (использующий Glassfish) для входа в систему каталога журналов, не в конфигурации?

В последний раз я проверил, это требует, чтобы Вы создали свой собственный ViewEngine. Я не знаю, помогли ли они в RC1 все же.

основной подход я использовал, прежде чем первый RC был, в моем собственном ViewEngine, чтобы разделить пространство имен контроллера и искать папки, которые соответствовали частям.

РЕДАКТИРОВАНИЕ:

Возвратился и нашел код. Вот общее представление.

public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName)
{
    string ns = controllerContext.Controller.GetType().Namespace;
    string controller = controllerContext.Controller.GetType().Name.Replace("Controller", "");

    //try to find the view
    string rel = "~/Views/" +
        (
            ns == baseControllerNamespace ? "" :
            ns.Substring(baseControllerNamespace.Length + 1).Replace(".", "/") + "/"
        )
        + controller;
    string[] pathsToSearch = new string[]{
        rel+"/"+viewName+".aspx",
        rel+"/"+viewName+".ascx"
    };

    string viewPath = null;
    foreach (var path in pathsToSearch)
    {
        if (this.VirtualPathProvider.FileExists(path))
        {
            viewPath = path;
            break;
        }
    }

    if (viewPath != null)
    {
        string masterPath = null;

        //try find the master
        if (!string.IsNullOrEmpty(masterName))
        {

            string[] masterPathsToSearch = new string[]{
                rel+"/"+masterName+".master",
                "~/Views/"+ controller +"/"+ masterName+".master",
                "~/Views/Shared/"+ masterName+".master"
            };


            foreach (var path in masterPathsToSearch)
            {
                if (this.VirtualPathProvider.FileExists(path))
                {
                    masterPath = path;
                    break;
                }
            }
        }

        if (string.IsNullOrEmpty(masterName) || masterPath != null)
        {
            return new ViewEngineResult(
                this.CreateView(controllerContext, viewPath, masterPath), this);
        }
    }

    //try default implementation
    var result = base.FindView(controllerContext, viewName, masterName);
    if (result.View == null)
    {
        //add the location searched
        return new ViewEngineResult(pathsToSearch);
    }
    return result;
}
9
задан Vinay Sajip 10 September 2009 в 12:41
поделиться

4 ответа

В Tomcat возможно следующее, возможно, Glassfish устанавливает аналогичную переменную среды, указывающую на расположение файловой системы:

log4j.appender.logfile.File=${catalina.home}/logs/MyApplication.log

$ {catalina.home} - это свойство среды / системы, установленное Tomcat указывает на его установочный каталог. Log4j может расширять их, по крайней мере, в PropertyConfigurer .

1
ответ дан 4 December 2019 в 13:03
поделиться

Вам необходимо указать абсолютный путь, а не относительный (предполагая пути Unix):

log4j.appender.logfile.File=/path/to/MyDomain/logs/MyApplication.log
0
ответ дан 4 December 2019 в 13:03
поделиться

Фактически, это log4j, который разрешает переменную $ {catalina.home}, Glassfish объявляет $ {catalina.home} как $ {com.sun.aas.instanceRoot}, указывающий на путь / to / MyDomain /

Вы можете объявить любую переменную в среде GF и поместить ее в log4j.properties, log4j проанализирует их, когда настроен log4j.

Это действительно полезно для установки параметров конфигурации ведения журнала на основе сервера, используя те же log4.properties для тестирования и развертывания

8
ответ дан 4 December 2019 в 13:03
поделиться

Райан Бейтс имеет Railscast, где он показывает создание поисков как ресурс. Концепция по-прежнему действительна, даже если вы не делаете Рейлз.

http://railscasts.com/episodes/111-advanced-search-form

-121--4460360-

Учитывая, что SimpleDateFormat не является потокозащитным, я бы сказал, что самый лаконичный способ - использовать Joda Time вместо него. Затем можно создать единый форматтер (вызов wityZone (DateTimeZones.UTC) , чтобы указать, что вы хотите UTC), и вы отсутствуете:

private static DateTimeFormatter formatter = DateTimeFormat.forPattern(...)
    .withZone(DateTimeZone.UTC);

...

String result = formatter.print(instant);

Это другое преимущество, что вы можете использовать Joda Time в другом месте вашего кода, что всегда хорошая вещь:)

-121--4154926-

Вы можете настроить приложение на использование $ {com.sun.aas.instureRoot}, но в отличие от некоторых других комментариев это должно быть:

log4j.appender.logfile.File=${com.sun.aas.instanceRoot}/logs/MyApplication.log

Это правильное расположение для журналов в каталоге ../domains/domain {x }/logs.

7
ответ дан 4 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: