From: <lor...@us...> - 2011-08-18 14:49:28
|
Revision: 3069 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3069&view=rev Author: lorenz_b Date: 2011-08-18 14:49:21 +0000 (Thu, 18 Aug 2011) Log Message: ----------- Small bugfix. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/DisjointClassesLearner.java trunk/components-core/src/main/java/org/dllearner/algorithms/properties/DisjointObjectPropertyAxiomLearner.java trunk/components-core/src/main/java/org/dllearner/core/owl/DisjointClassesAxiom.java trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EnrichmentEvaluation.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWL2SPARULConverter.java trunk/scripts/src/main/resources/log4j.properties Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/DisjointClassesLearner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/DisjointClassesLearner.java 2011-08-18 09:22:41 UTC (rev 3068) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/DisjointClassesLearner.java 2011-08-18 14:49:21 UTC (rev 3069) @@ -288,7 +288,7 @@ l.init(); l.start(); - for(EvaluatedDescription e : l.getCurrentlyBestEvaluatedDescriptions(300)){ + for(EvaluatedAxiom e : l.getCurrentlyBestEvaluatedAxioms(50)){ System.out.println(e); } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/properties/DisjointObjectPropertyAxiomLearner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/properties/DisjointObjectPropertyAxiomLearner.java 2011-08-18 09:22:41 UTC (rev 3068) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/properties/DisjointObjectPropertyAxiomLearner.java 2011-08-18 14:49:21 UTC (rev 3069) @@ -137,9 +137,8 @@ public List<Axiom> getCurrentlyBestAxioms(int nrOfAxioms) { List<Axiom> bestAxioms = new ArrayList<Axiom>(); - Iterator<EvaluatedAxiom> it = currentlyBestAxioms.iterator(); - while(bestAxioms.size() < nrOfAxioms && it.hasNext()){ - bestAxioms.add(it.next().getAxiom()); + for(EvaluatedAxiom evAx : getCurrentlyBestEvaluatedAxioms(nrOfAxioms)){ + bestAxioms.add(evAx.getAxiom()); } return bestAxioms; Modified: trunk/components-core/src/main/java/org/dllearner/core/owl/DisjointClassesAxiom.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/core/owl/DisjointClassesAxiom.java 2011-08-18 09:22:41 UTC (rev 3068) +++ trunk/components-core/src/main/java/org/dllearner/core/owl/DisjointClassesAxiom.java 2011-08-18 14:49:21 UTC (rev 3069) @@ -19,6 +19,7 @@ */ package org.dllearner.core.owl; +import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -52,12 +53,31 @@ * @see org.dllearner.core.owl.KBElement#toString(java.lang.String, java.util.Map) */ public String toString(String baseURI, Map<String, String> prefixes) { - return "DisjointClasses()"; + StringBuffer sb = new StringBuffer(); + sb.append("DisjointClasses("); + Iterator<Description> it = descriptions.iterator(); + while(it.hasNext()){ + sb.append(it.next().toString()); + if(it.hasNext()){ + sb.append(", "); + } + } + sb.append(")"); + return sb.toString(); } public String toKBSyntaxString(String baseURI, Map<String, String> prefixes) { - // TODO Auto-generated method stub - throw new Error("DisjointClassesAxiom: Not implemented"); + StringBuffer sb = new StringBuffer(); + sb.append("DisjointClasses("); + Iterator<Description> it = descriptions.iterator(); + while(it.hasNext()){ + sb.append(it.next().toKBSyntaxString()); + if(it.hasNext()){ + sb.append(", "); + } + } + sb.append(")"); + return sb.toString(); } @@ -83,7 +103,17 @@ */ @Override public String toManchesterSyntaxString(String baseURI, Map<String, String> prefixes) { - return "DISJOINT_CLASSES_AXIOM NOT IMPLEMENTED"; + StringBuffer sb = new StringBuffer(); + sb.append("DisjointClasses("); + Iterator<Description> it = descriptions.iterator(); + while(it.hasNext()){ + sb.append(it.next().toManchesterSyntaxString(baseURI, prefixes)); + if(it.hasNext()){ + sb.append(", "); + } + } + sb.append(")"); + return sb.toString(); } } Added: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWL2SPARULConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWL2SPARULConverter.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWL2SPARULConverter.java 2011-08-18 14:49:21 UTC (rev 3069) @@ -0,0 +1,102 @@ +package org.dllearner.utilities.owl; + +import java.util.Collection; +import java.util.List; + +import org.coode.owlapi.rdf.model.AbstractTranslator; +import org.coode.owlapi.rdf.model.RDFLiteralNode; +import org.coode.owlapi.rdf.model.RDFNode; +import org.coode.owlapi.rdf.model.RDFResourceNode; +import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLAxiom; +import org.semanticweb.owlapi.model.OWLLiteral; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyChange; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.model.RemoveAxiom; + +public class OWL2SPARULConverter + extends + AbstractTranslator<RDFNode, RDFResourceNode, RDFResourceNode, RDFLiteralNode> { + private StringBuilder sb; + + public OWL2SPARULConverter(OWLOntologyManager manager, + OWLOntology ontology, boolean useStrongTyping) { + super(manager, ontology, useStrongTyping); + } + + public OWL2SPARULConverter(OWLOntology ontology, boolean useStrongTyping) { + super(ontology.getOWLOntologyManager(), ontology, useStrongTyping); + } + + public String convert(OWLOntology ontology) { + return convert(ontology, true); + } + + public String convert(OWLOntology ontology, boolean add) { + return convert(ontology.getAxioms()); + } + + public String convert(Collection<OWLAxiom> axioms) { + return convert(axioms, true); + } + + public String convert(Collection<OWLAxiom> axioms, boolean add) { + sb = new StringBuilder(); + for (OWLAxiom ax : axioms) { + sb.append(add ? "INSERT DATA" + : "DELETE DATA"); + sb.append("{"); + ax.accept(this); + sb.append("}"); + sb.append("\n"); + } + return sb.toString(); + } + + public String translate(List<OWLOntologyChange> changes) { + sb = new StringBuilder(); + for (OWLOntologyChange change : changes) { + sb.append(change instanceof RemoveAxiom ? "DELETE DATA" + : "INSERT DATA"); + sb.append("{"); + change.getAxiom().accept(this); + sb.append("}"); + sb.append("\n"); + } + return sb.toString(); + } + + @Override + protected void addTriple(RDFResourceNode subject, RDFResourceNode pred, + RDFNode object) { + sb.append(subject).append(" ").append(pred).append(" ").append(object); + + } + + @Override + protected RDFResourceNode getAnonymousNode(Object key) { + return new RDFResourceNode(System.identityHashCode(key)); + } + + @Override + protected RDFResourceNode getPredicateNode(IRI iri) { + return new RDFResourceNode(iri); + } + + @Override + protected RDFResourceNode getResourceNode(IRI iri) { + return new RDFResourceNode(iri); + } + + @Override + protected RDFLiteralNode getLiteralNode(OWLLiteral literal) { + if (literal.getDatatype() != null) { + return new RDFLiteralNode(literal.toString(), literal.getDatatype() + .getIRI()); + } else { + return new RDFLiteralNode(literal.toString(), literal.getLang()); + } + + } +} Modified: trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java =================================================================== --- trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java 2011-08-18 09:22:41 UTC (rev 3068) +++ trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java 2011-08-18 14:49:21 UTC (rev 3069) @@ -21,6 +21,7 @@ import static java.util.Arrays.asList; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -127,6 +128,7 @@ import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; +import com.hp.hpl.jena.rdf.model.Statement; /** * Command Line Interface for Enrichment. @@ -495,7 +497,16 @@ algorithmRunInd, algorithmInd); axioms.add(ax); //add Parameters to algorithm run instance - //TODO + OWLIndividual paramInd; + for(Entry<ConfigOption, String> entry : parameters.entrySet()){ + paramInd = f.getOWLNamedIndividual(IRI.create(generateId())); + ax = f.getOWLClassAssertionAxiom(EnrichmentVocabulary.Parameter, paramInd); + axioms.add(ax); + ax = f.getOWLDataPropertyAssertionAxiom(EnrichmentVocabulary.parameterName, paramInd, entry.getKey().name()); + axioms.add(ax); + ax = f.getOWLDataPropertyAssertionAxiom(EnrichmentVocabulary.parameterValue, paramInd, entry.getValue()); + axioms.add(ax); + } //add used input to algorithm run instance try { OWLNamedIndividual knowldegeBaseInd = f.getOWLNamedIndividual(IRI.create(ks.getEndpoint().getURL())); @@ -561,10 +572,24 @@ } } +// private Model getModel(List<OWLAxiom> axioms) { +// Model model = ModelFactory.createDefaultModel(); +// try { +// Conversion.OWLAPIOntology2JenaModel(OWLManager.createOWLOntologyManager().createOntology(new HashSet<OWLAxiom>(axioms)), model); +// } catch (OWLOntologyCreationException e) { +// e.printStackTrace(); +// } +// return model; +// } + private Model getModel(List<OWLAxiom> axioms) { Model model = ModelFactory.createDefaultModel(); try { - Conversion.OWLAPIOntology2JenaModel(OWLManager.createOWLOntologyManager().createOntology(new HashSet<OWLAxiom>(axioms)), model); + OWLOntology ontology = OWLManager.createOWLOntologyManager().createOntology(new HashSet<OWLAxiom>(axioms)); +// String s = new org.aksw.commons.owlapi.StringConverter(ontology).toStringAsRDFXML();System.out.println(s); + String s = new org.aksw.commons.owlapi.StringConverter(ontology).toStringAsTurtle();System.out.println(s); + ByteArrayInputStream bs = new ByteArrayInputStream(s.getBytes()); + model.read(bs, "", "TURTLE"); } catch (OWLOntologyCreationException e) { e.printStackTrace(); } @@ -695,6 +720,18 @@ axioms.addAll(e.toRDF(run.getAxioms(), run.getAlgorithm(), run.getParameters(), ks)); } Model model = e.getModel(axioms); + for(Statement st : model.listStatements().toList()){ + System.out.println("--------------------"); +// System.out.println(st); + if(st.getSubject().isResource()){ + System.out.println(st.getSubject()); + } + System.out.println(st.getPredicate()); + if(st.getObject().isResource()){ + + } + System.out.println(st.getObject()); + } if(options.has("o")) { model.write(new FileOutputStream(f)); } else { Modified: trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EnrichmentEvaluation.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EnrichmentEvaluation.java 2011-08-18 09:22:41 UTC (rev 3068) +++ trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EnrichmentEvaluation.java 2011-08-18 14:49:21 UTC (rev 3069) @@ -38,7 +38,11 @@ import java.util.Set; import java.util.prefs.Preferences; +import org.apache.log4j.FileAppender; +import org.apache.log4j.Level; import org.apache.log4j.Logger; +import org.apache.log4j.SimpleLayout; +import org.apache.velocity.context.EvaluateContext; import org.dllearner.algorithms.DisjointClassesLearner; import org.dllearner.algorithms.SimpleSubclassLearner; import org.dllearner.algorithms.celoe.CELOE; @@ -59,14 +63,17 @@ import org.dllearner.algorithms.properties.ObjectPropertyRangeAxiomLearner; import org.dllearner.algorithms.properties.SymmetricObjectPropertyAxiomLearner; import org.dllearner.algorithms.properties.TransitiveObjectPropertyAxiomLearner; +import org.dllearner.core.AbstractCELA; import org.dllearner.core.AnnComponentManager; import org.dllearner.core.AxiomLearningAlgorithm; import org.dllearner.core.ComponentInitException; import org.dllearner.core.ComponentManager; import org.dllearner.core.EvaluatedAxiom; +import org.dllearner.core.EvaluatedDescription; import org.dllearner.core.LearningAlgorithm; import org.dllearner.core.config.ConfigHelper; import org.dllearner.core.owl.DatatypeProperty; +import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.ObjectProperty; import org.dllearner.kb.SparqlEndpointKS; import org.dllearner.kb.sparql.SPARQLTasks; @@ -94,9 +101,9 @@ private int nrOfAxiomsToLearn = 10; // can be used to only evaluate a part of DBpedia - private int maxObjectProperties = 10; - private int maxDataProperties = 10; - private int maxClasses = 10; + private int maxObjectProperties = 0; + private int maxDataProperties = 0; + private int maxClasses = 0; private List<Class<? extends AxiomLearningAlgorithm>> objectPropertyAlgorithms; private List<Class<? extends AxiomLearningAlgorithm>> dataPropertyAlgorithms; private List<Class<? extends LearningAlgorithm>> classAlgorithms; @@ -135,9 +142,9 @@ dataPropertyAlgorithms.add(SubDataPropertyOfAxiomLearner.class); classAlgorithms = new LinkedList<Class<? extends LearningAlgorithm>>(); - classAlgorithms.add(DisjointClassesLearner.class); +// classAlgorithms.add(DisjointClassesLearner.class); classAlgorithms.add(SimpleSubclassLearner.class); - classAlgorithms.add(CELOE.class); +// classAlgorithms.add(CELOE.class); initDBConnection(); } @@ -196,7 +203,7 @@ IllegalAccessException, InvocationTargetException, NoSuchMethodException, ComponentInitException { long overallStartTime = System.currentTimeMillis(); - ComponentManager cm = ComponentManager.getInstance(); +// ComponentManager cm = ComponentManager.getInstance(); // create DBpedia Live knowledge source SparqlEndpoint se = SparqlEndpoint.getEndpointDBpediaLiveAKSW(); @@ -206,8 +213,10 @@ evaluateObjectProperties(ks); -// evaluateDataProperties(ks); + evaluateDataProperties(ks); + evaluateClasses(ks); + System.out.println("Overall runtime: " + (System.currentTimeMillis()-overallStartTime)/1000 + "s."); } @@ -217,50 +226,58 @@ for (Class<? extends AxiomLearningAlgorithm> algorithmClass : objectPropertyAlgorithms) { int objectProperties = 0; - for (ObjectProperty property : properties) { - - // dynamically invoke constructor with SPARQL knowledge source - AxiomLearningAlgorithm learner = algorithmClass.getConstructor( - SparqlEndpointKS.class).newInstance(ks); - ConfigHelper.configure(learner, "propertyToDescribe", property.toString()); - ConfigHelper.configure(learner, "maxExecutionTimeInSeconds", - maxExecutionTimeInSeconds); - learner.init(); - // learner.setPropertyToDescribe(property); - // learner.setMaxExecutionTimeInSeconds(10); - String algName = AnnComponentManager.getName(learner); - System.out.println("Applying " + algName + " on " + property + " ... "); - long startTime = System.currentTimeMillis(); - boolean timeout = false; - try { - learner.start(); - } catch (Exception e) { - if(e.getCause() instanceof SocketTimeoutException){ - timeout = true; - } - } - long runTime = System.currentTimeMillis() - startTime; - List<EvaluatedAxiom> learnedAxioms = learner - .getCurrentlyBestEvaluatedAxioms(nrOfAxiomsToLearn); - if(timeout){ - writeToDB(property.toManchesterSyntaxString(baseURI, prefixes), algName, "TIMEOUT", 0, runTime); - } else if (learnedAxioms == null || learnedAxioms.isEmpty()) { - writeToDB(property.toManchesterSyntaxString(baseURI, prefixes), algName, "NULL", 0, runTime); - } else { - for (EvaluatedAxiom learnedAxiom : learnedAxioms) { - double score = learnedAxiom.getScore().getAccuracy(); - if (Double.isNaN(score)) { - score = -1; + + String algName = ""; + for (ObjectProperty property : properties) { + + try { + // dynamically invoke constructor with SPARQL knowledge source + AxiomLearningAlgorithm learner = algorithmClass.getConstructor( + SparqlEndpointKS.class).newInstance(ks); + ConfigHelper.configure(learner, "propertyToDescribe", property.toString()); + ConfigHelper.configure(learner, "maxExecutionTimeInSeconds", + maxExecutionTimeInSeconds); + learner.init(); + // learner.setPropertyToDescribe(property); + // learner.setMaxExecutionTimeInSeconds(10); + algName = AnnComponentManager.getName(learner); + System.out.println("Applying " + algName + " on " + property + " ... "); + long startTime = System.currentTimeMillis(); + boolean timeout = false; + try { + learner.start(); + } catch (Exception e) { + if(e.getCause() instanceof SocketTimeoutException){ + timeout = true;throw e; + } } - writeToDB(property.toManchesterSyntaxString(baseURI, prefixes) .toString(), algName, learnedAxiom.getAxiom().toManchesterSyntaxString(baseURI, prefixes), - score, runTime); + long runTime = System.currentTimeMillis() - startTime; + List<EvaluatedAxiom> learnedAxioms = learner + .getCurrentlyBestEvaluatedAxioms(nrOfAxiomsToLearn); + if(timeout){ + writeToDB(property.toManchesterSyntaxString(baseURI, prefixes), algName, "TIMEOUT", 0, runTime); + } else if (learnedAxioms == null || learnedAxioms.isEmpty()) { + writeToDB(property.toManchesterSyntaxString(baseURI, prefixes), algName, "NULL", 0, runTime); + } else { + for (EvaluatedAxiom learnedAxiom : learnedAxioms) { + double score = learnedAxiom.getScore().getAccuracy(); + if (Double.isNaN(score)) { + score = -1; + } + writeToDB(property.toManchesterSyntaxString(baseURI, prefixes) .toString(), algName, learnedAxiom.getAxiom().toManchesterSyntaxString(baseURI, prefixes), + score, runTime); + } + } + objectProperties++; + if (maxObjectProperties != 0 && objectProperties > maxObjectProperties) { + break; + } + + } catch (Exception e) { + logger.error("Error occured for object property " + property.getName() + " with algorithm " + algName , e); } } - objectProperties++; - if (maxObjectProperties != 0 && objectProperties > maxObjectProperties) { - break; - } - } + } } @@ -269,8 +286,11 @@ for (Class<? extends AxiomLearningAlgorithm> algorithmClass : dataPropertyAlgorithms) { int dataProperties = 0; + + String algName = ""; for (DatatypeProperty property : properties) { + try{ // dynamically invoke constructor with SPARQL knowledge source AxiomLearningAlgorithm learner = algorithmClass.getConstructor( SparqlEndpointKS.class).newInstance(ks); @@ -280,7 +300,7 @@ learner.init(); // learner.setPropertyToDescribe(property); // learner.setMaxExecutionTimeInSeconds(10); - String algName = AnnComponentManager.getName(learner); + algName = AnnComponentManager.getName(learner); System.out.println("Applying " + algName + " on " + property + " ... "); long startTime = System.currentTimeMillis(); boolean timeout = false; @@ -312,10 +332,76 @@ if (maxDataProperties != 0 && dataProperties > maxDataProperties) { break; } + + } catch (Exception e) { + logger.error("Error occured for data property " + property.getName() + " with algorithm " + algName , e); } + } } } + + private void evaluateClasses(SparqlEndpointKS ks) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, ComponentInitException{ + Set<NamedClass> classes = new SPARQLTasks(ks.getEndpoint()).getAllClasses(); + for (Class<? extends LearningAlgorithm> algorithmClass : classAlgorithms) { + int classesCnt = 0; + for (NamedClass cls : classes) { + + try{ + // dynamically invoke constructor with SPARQL knowledge source + LearningAlgorithm learner = algorithmClass.getConstructor( + SparqlEndpointKS.class).newInstance(ks); + ConfigHelper.configure(learner, "classToDescribe", cls.toString()); + ConfigHelper.configure(learner, "maxExecutionTimeInSeconds", + maxExecutionTimeInSeconds); + learner.init(); + // learner.setPropertyToDescribe(property); + // learner.setMaxExecutionTimeInSeconds(10); + String algName = AnnComponentManager.getName(learner); + System.out.println("Applying " + algName + " on " + cls + " ... "); + long startTime = System.currentTimeMillis(); + boolean timeout = false; + try { + learner.start(); + } catch (Exception e) { + if(e.getCause() instanceof SocketTimeoutException){ + timeout = true; + } + } + long runTime = System.currentTimeMillis() - startTime; + if(learner instanceof AxiomLearningAlgorithm){ + List<EvaluatedAxiom> learnedAxioms = ((AxiomLearningAlgorithm)learner) + .getCurrentlyBestEvaluatedAxioms(nrOfAxiomsToLearn); + if(timeout){ + writeToDB(cls.toManchesterSyntaxString(baseURI, prefixes), algName, "TIMEOUT", 0, runTime); + } else if (learnedAxioms == null || learnedAxioms.isEmpty()) { + writeToDB(cls.toManchesterSyntaxString(baseURI, prefixes), algName, "NULL", 0, runTime); + } else { + for (EvaluatedAxiom learnedAxiom : learnedAxioms) { + double score = learnedAxiom.getScore().getAccuracy(); + if (Double.isNaN(score)) { + score = -1; + } + writeToDB(cls.toManchesterSyntaxString(baseURI, prefixes) .toString(), algName, learnedAxiom.getAxiom().toManchesterSyntaxString(baseURI, prefixes), + score, runTime); + } + } + } else if(learner instanceof AbstractCELA){ + + } + + classesCnt++; + if (maxClasses != 0 && classesCnt > maxClasses) { + break; + } + + } catch(Exception e){ + logger.error("Error occured for class " + cls.getName(), e); + } + } + } + } + public void printResultsPlain() { } @@ -357,11 +443,15 @@ public static void main(String[] args) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, - NoSuchMethodException, ComponentInitException, SQLException { + NoSuchMethodException, ComponentInitException, SQLException, IOException { EnrichmentEvaluation ee = new EnrichmentEvaluation(); ee.start(); // ee.printResultsPlain(); Files.createFile(new File("enrichment_eval.html"), ee.printHTMLTable()); + FileAppender app = new FileAppender(new SimpleLayout(), "log/enrichmentEvalErrors.log"); + Logger.getRootLogger().setLevel(Level.ERROR); + Logger.getRootLogger().removeAllAppenders(); + Logger.getRootLogger().addAppender(app); } } Added: trunk/scripts/src/main/resources/log4j.properties =================================================================== --- trunk/scripts/src/main/resources/log4j.properties (rev 0) +++ trunk/scripts/src/main/resources/log4j.properties 2011-08-18 14:49:21 UTC (rev 3069) @@ -0,0 +1,9 @@ +log4j.appender.A1=org.apache.log4j.RollingFileAppender +log4j.appender.A1.File=log/errors.log +log4j.appender.A1.layout=org.apache.log4j.PatternLayout + +log4j.appender.A2=org.apache.log4j.RollingFileAppender +log4j.appender.A2.File=log/queries.log +log4j.appender.A2.layout=org.apache.log4j.PatternLayout + +log4j.rootLogger=ERROR,A1 \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |