Claus Ibsen created CAMEL-25820:
-----------------------------------

             Summary: camel-jbang - the default log4j configuration leaves log 
files in ~/.camel, such as ${sys:pid}.log
                 Key: CAMEL-25820
                 URL: https://issues.apache.org/jira/browse/CAMEL-25820
             Project: Camel
          Issue Type: Bug
          Components: camel-jbang
            Reporter: Claus Ibsen
             Fix For: 4.24.0


{{camel-jbang-core/src/main/resources/log4j2.properties}} is the configuration 
that {{camel run}} uses (with color). It is also the configuration that log4j 
finds on the classpath of any JVM with camel-jbang-core, when nothing 
configures logging. Its file appender writes to 
{{$\{sys:user.home\}/.camel/$\{sys:pid\}.log}}. That leaves log files in 
{{~/.camel}} in three ways. One machine had 17 such files, from Oct 15 to Oct 
19.

# *A file named {{$\{sys:pid\}.log}}.* Only {{CamelJBangMain.execute()}} and 
{{RuntimeUtil.configureLog()}} set the {{pid}} system property. A JVM that uses 
camel-jbang-core without them writes its first log line to a file of that 
literal name. An example is a test of a module that depends on camel-jbang-core 
and has no log4j configuration of its own. Reproduced with a test in 
camel-jbang-plugin-validate that logs one warning with SLF4J. The file on the 
machine (Oct 16) had one line, logged in a test with JUnit parallel mode 
(thread ForkJoinPool-1-worker-1):
{noformat}WARN 31691 --- [Pool-1-worker-1] 
knt.schema.keyword.UnknownKeywordFactory : Unknown keyword templateEntry - you 
should define your own Meta Schema. ...{noformat}
That warning comes from the Kamelet schema that {{YamlValidator}} 
(camel-yaml-dsl-validator) builds. The schema keeps a subschema under the root 
key {{templateEntry}}, which is not a JSON schema keyword. The warning is 
logged each time a Kamelet is validated.
# *{{<pid>.log}} of {{camel test run}}.* The command sets {{pid}}, and log4j 
then loads this configuration, so a Citrus test run writes 
{{~/.camel/<pid>.log}}. Only {{camel run}} removes its log, so the file stays. 
9 files on the machine, such as one of the camel-jbang-examples 
({{CamelRunIntegrationAction : Starting Camel integration 'rest-code-first'}}). 
The tests of camel-jbang-plugin-test write one too.
# *{{<pid>.log}} of tests that run Camel.* The file is under 
{{$\{sys:user.home\}}}, not under the home directory that the CLI uses 
({{CommandLineHelper.getCamelDir()}}). A test that runs Camel in its JVM, with 
a home directory of its own, logs into the real {{~/.camel}}. The run looks for 
its log in its own home directory, so the file stays. 7 files of about 450 KB 
on the machine, from the tests of camel-jbang-plugin-kubernetes.

A fix could:
* Make the {{log4j2.properties}} that log4j finds on the classpath log to the 
console only. The configuration of {{camel run}} gets a name of its own, such 
as {{log4j2-color.properties}} next to {{log4j2-no-color.properties}}. 
{{RuntimeUtil}} loads it by name in two places.
* Name the log file after a property that {{RuntimeUtil}} sets from 
{{CommandLineHelper.getCamelDir()}}, so a CLI with another home directory logs 
there.
* Keep the Kamelet subschema of {{YamlValidator}} under {{$defs}}, so that 
validating a Kamelet logs no warning.

The PR of CAMEL-25784 removes a {{<pid>.log}} of a process that is gone after a 
day, when no status file names it. That clears these files away, but does not 
stop them.

_Claude Code on behalf of davsclaus_



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to