Customizing logback color scheme - scala

I have been messing with my logback coloring and Im wondering if I can change the highlighting colors. Right now I have this
Which is ok, but I would like to make info blue, warnings yellow and errors non-bold red or something along those lines. Is that possible? Also, is it possible to select different colors for the logger name highlighting? For instance, if I wanted com.blah to be cyan and org.apache logger magenta or something else? My current pattern is
<Pattern>%d{HH:mm:ss.SSS} %highlight(%-5level) [%thread] %cyan(%logger{36}) - %highlight(%msg%n)</Pattern>
This is a Scala project with SBT and I use logback for logging if that makes a difference.

Yes, judging from the Spring ColorConverter this should be possible with a bit of custom code. See the default Spring logback configuration.
For coloring JSON output with Logback Logstash, I've written (shameless plug) this project in which the same type of functionality can be added.

the bellow works for me
Java Code
package com.acme.logback;
public class MyCustomHighlighting extends ForegroundCompositeConverterBase<ILoggingEvent> {
#Override
protected String getForegroundColorCode(ILoggingEvent event) {
Level level = event.getLevel();
switch (level.toInt()) {
case Level.ERROR_INT:
return ANSIConstants.BOLD + ANSIConstants.RED_FG; // same as default color scheme
case Level.WARN_INT:
return ANSIConstants.RED_FG;// same as default color scheme
case Level.INFO_INT:
return ANSIConstants.CYAN_FG; // use CYAN instead of BLUE
default:
return ANSIConstants.DEFAULT_FG;
}
}
}
Logback.xml
<configuration>
<!-- custom coloring conversion -->
<conversionRule conversionWord="myCustomHighlighting" converterClass="com.acme.logback.MyCustomHighlighting" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<encoder>
<pattern>[%thread] %myCustomHighlighting(%-5level) %logger{15} - %myCustomHighlighting(%msg) %n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>

Related

Visibility in popup menus

I have created an eclipse plugin project. I want this plugin to be available as a popup. Therefore I have created an extension point with "org.eclipse.ui.popupMenus" (I know it is deprecated now, ours is an old project.)
I want this popup option to appear only at the file level with certain extension (say xml). Currently, it is appearing anywhere on right click.
I have looked around the internet and got to know that I can add a "visibility" tag that can set rules where this popup should be visible. However, I do not know the syntax for that.
Can someone please help me out? How to set the visibility of the popup menu so that it is visible only when I right click ON the filename with extension xml?
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.2"?>
<plugin>
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
adaptable="true"
objectClass="org.eclipse.core.resources.IFile"
nameFilter="*.*"
id="org.eclipse.lyo.tools.codegenerator.ui.popupMenus.contribution.IFile">
<menu id="org.eclipse.acceleo.module.menu" label="Acceleo Model Code Generator" path="additionsAcceleo">
<groupMarker name="acceleo"/>
</menu>
<action
class="org.eclipse.lyo.tools.codegenerator.ui.popupMenus.AcceleoGenerateCodegeneratorAction"
enablesFor="+"
id="org.eclipse.lyo.tools.codegenerator.ui.popupMenus.AcceleoGenerateCodegeneratorAction"
icon="icons/default.gif"
label="Generate Java Code from Model"
menubarPath="org.eclipse.acceleo.module.menu/acceleo"/>
<visibility>
//what should come here?
</visibility>
</objectContribution>
</extension>
</plugin>
(http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fextension-points%2Forg_eclipse_ui_popupMenus.html)
Regards,
Yash
visibility can only be a child of objectContribution not action.
In any case you can use the namefilter attribute to restrict the file name matching. You would only use visiblity to do more complex checks.
For example this is one of the JDT items:
<objectContribution
adaptable="true"
objectClass="org.eclipse.core.resources.IFile"
nameFilter="*.xml"
id="org.eclipse.jdt.internal.ui.javadocexport.JavadocWizard">
<visibility>
<objectState name="contentTypeId" value="org.eclipse.ant.core.antBuildFile"/>
</visibility>
In this
adaptable="true"
objectClass="org.eclipse.core.resources.IFile"
restricts the actions to a workspace file
nameFilter="*.xml"
restricts the actions to files ending in .xml
<visibility>
<objectState name="contentTypeId" value="org.eclipse.ant.core.antBuildFile"/>
</visibility>
further restricts the actions to files with a 'content type' of 'Ant build file'
To match multiple name patterns remove the nameFilter and use a visibility like:
<visibility>
<or>
<objectState name="name" value="*.xml"/>
<objectState name="name" value="*.java"/>
</or>
</visibility>

GWT property with is-multi-valued already defined

While migrating from GWT 2.7.0 to 2.8.2 I came upon property:
<define-configuration-property name="CssResource.gssDefaultInUiBinder"
is-multi-valued="true" />
If this is left as it is, I get an error: The configuration property named CssResource.gssDefaultInUiBinder is already defined with a different 'is-multi-valued' setting.
Does that mean that I can't set attribute is-multi-valued to already defined property? Why would this work with GWT 2.7.0 then? Can anyone give me an explanation about this attribute? Because I am failing to find one...
Attribute set in GWT resources:
<!-- The default for GSS in UiBinder -->
<define-configuration-property name="CssResource.gssDefaultInUiBinder" is-multi-valued="false" />
gwt/user/src/com/google/gwt/resources/Resources.gwt.xml
Correct - you should not be trying to change is-multi-valued, it doesn't really make any sense. You can't re-define a property or configuration-property after it has been set, you can only set the value.
If you want to turn the gss-in-ui-binder flag on, use this:
<set-configuration-property name="CssResource.gssDefaultInUiBinder" value="true" />
If you want to turn it off, either do nothing, or do this:
<set-configuration-property name="CssResource.gssDefaultInUiBinder" value="false" />

I added a custom block to before_body_end. Why isn't it displayed?

I created a new custom block and added it to the before_body_end block.
When I look in my pages' source code, nothing appears from my custom block.
Could you help me debug this please ?
In my module layout XML file :
<layout version="0.1.0">
<default>
<reference name="before_body_end">
<block type="tankchat/js_view" name="tankchat.js.view" as="tankchat" template="tankchat/js/view.phtml" />
</reference>
</default>
</layout>
Nothing special in my Company_Tankchat_Block_Js_View class, only some "getData" functions.
And my phtml is located at app/design/frontend/company/default/template/tankchat/js/view.phtml and yes it's the good package and theme etc.
Do I need to add somewhere a echo $this->getChildHtml('tankchat') ? I think I don't because my custom block is passed to before_body_end, but maybe I'm wrong ?
Any help will be highly appreciated !
Ok I finally found out what was wrong :
I made a mistake declaring my layout file, it need to be done in frontend node, not in global ! :
<config>
<frontend>
<layout>
<updates>
<tankchat>
<file>tankchat.xml</file>
</tankchat>
</updates>
</layout>
</frontend>
</config>
The file wasn't even opened by the app...
But I also forgot to declare the blocks prefix in my module config file :
<config>
<global>
<blocks>
<tankchat>
<class>Company_Tankchat_Block</class>
</tankchat>
</blocks>
</global>
</config>
The block class wasn't found by autoloader...
Hope this will help someone in the future...

netbeans, xml autocomplete for attributes fails for default namespace

I've defined two namespaces: beans, aop.
If you cut & paste into a Netbeans the tag that i've written below, and you try to edit a tag inside beans:beans you should observe this behavior:
<beans:import />
typing this the autocomplete assists you, and after the element name, it proposes the list of attributes (in this case just one).
<aspectj-autoproxy />
typing this the autocomplete dosn't propose the list of attributes (there are two attributes: proxy-target-class, expose-proxy)
It happens for the attributes of the default namespace's elements.
Is it a bug? Am I doing something wrong?
I've tested on NB 6.9 and NB 7.0
thanks in advance
<beans:beans
xmlns:beans ="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
try here
</beans:beans>

RESTful Grails: how do I include related entities in my XML?

Let's say I have a class called Store that has many Employees. My RESTful listXML method looks like this:
def listXML = {
render Store.list() as XML
}
And the result looks like this:
<stores>
<store id="1">
<name>My Store</name>
<employees>
<employee id="1" />
</employees>
</store>
</store>
My question is, how do I include all the data of each Employee class, so that my XML looks something like this?
<stores>
<store id="1">
<name>My Store</name>
<employees>
<employee id="1">
<name>John Smith</name>
<hireDate>2008-01-01</hireDate>
</employee>
</employees>
</store>
</store>
In your controller, you'll want to import the deep converter:
import grails.converters.deep.XML
You can read about it in the first couple of paragraphs of the Converters Reference.
As of Grails 1.1 you will be able to configure Grails to default to deeply serializing by including this in your grails-app/conf/Config.groovy:
grails.converters.xml.default.deep = true
1.1 also introduces named configurations for Converters. The deep converters will be deprecated and the named configuration "deep" should be used instead.
XML.use("deep") {
render model as XML
}