ログ出力先に全レベルのログを出力して、設定ファイルが期待通りかを確認するツール
修訂 | c7fceab91a3e4b70ca0725ec8f6417bca5d8991b (tree) |
---|---|
時間 | 2022-01-23 00:31:34 |
作者 | kemono7h |
Commiter | kemono7h |
初回登録
@@ -0,0 +1,25 @@ | ||
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<classpath> | |
3 | + <classpathentry kind="src" output="bin/main" path="src/main/java"> | |
4 | + <attributes> | |
5 | + <attribute name="gradle_scope" value="main"/> | |
6 | + <attribute name="gradle_used_by_scope" value="main,test"/> | |
7 | + </attributes> | |
8 | + </classpathentry> | |
9 | + <classpathentry kind="src" output="bin/main" path="src/main/resources"> | |
10 | + <attributes> | |
11 | + <attribute name="gradle_scope" value="main"/> | |
12 | + <attribute name="gradle_used_by_scope" value="main,test"/> | |
13 | + </attributes> | |
14 | + </classpathentry> | |
15 | + <classpathentry kind="src" output="bin/test" path="src/test/java"> | |
16 | + <attributes> | |
17 | + <attribute name="gradle_scope" value="test"/> | |
18 | + <attribute name="gradle_used_by_scope" value="test"/> | |
19 | + <attribute name="test" value="true"/> | |
20 | + </attributes> | |
21 | + </classpathentry> | |
22 | + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/> | |
23 | + <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/> | |
24 | + <classpathentry kind="output" path="bin/default"/> | |
25 | +</classpath> |
@@ -0,0 +1,37 @@ | ||
1 | +HELP.md | |
2 | +.gradle | |
3 | +build/ | |
4 | +!gradle/wrapper/gradle-wrapper.jar | |
5 | +!**/src/main/**/build/ | |
6 | +!**/src/test/**/build/ | |
7 | + | |
8 | +### STS ### | |
9 | +.apt_generated | |
10 | +.classpath | |
11 | +.factorypath | |
12 | +.project | |
13 | +.settings | |
14 | +.springBeans | |
15 | +.sts4-cache | |
16 | +bin/ | |
17 | +!**/src/main/**/bin/ | |
18 | +!**/src/test/**/bin/ | |
19 | + | |
20 | +### IntelliJ IDEA ### | |
21 | +.idea | |
22 | +*.iws | |
23 | +*.iml | |
24 | +*.ipr | |
25 | +out/ | |
26 | +!**/src/main/**/out/ | |
27 | +!**/src/test/**/out/ | |
28 | + | |
29 | +### NetBeans ### | |
30 | +/nbproject/private/ | |
31 | +/nbbuild/ | |
32 | +/dist/ | |
33 | +/nbdist/ | |
34 | +/.nb-gradle/ | |
35 | + | |
36 | +### VS Code ### | |
37 | +.vscode/ |
@@ -0,0 +1,7 @@ | ||
1 | +syntax: regexp | |
2 | +^bin/ | |
3 | +^sample/bin/ | |
4 | +^logs/ | |
5 | +^.gradle/ | |
6 | +/~\$ | |
7 | + |
@@ -0,0 +1,23 @@ | ||
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<projectDescription> | |
3 | + <name>LogConfigTester</name> | |
4 | + <comment>Project LogConfigTester created by Buildship.</comment> | |
5 | + <projects> | |
6 | + </projects> | |
7 | + <buildSpec> | |
8 | + <buildCommand> | |
9 | + <name>org.eclipse.jdt.core.javabuilder</name> | |
10 | + <arguments> | |
11 | + </arguments> | |
12 | + </buildCommand> | |
13 | + <buildCommand> | |
14 | + <name>org.eclipse.buildship.core.gradleprojectbuilder</name> | |
15 | + <arguments> | |
16 | + </arguments> | |
17 | + </buildCommand> | |
18 | + </buildSpec> | |
19 | + <natures> | |
20 | + <nature>org.eclipse.jdt.core.javanature</nature> | |
21 | + <nature>org.eclipse.buildship.core.gradleprojectnature</nature> | |
22 | + </natures> | |
23 | +</projectDescription> |
@@ -0,0 +1,2 @@ | ||
1 | +connection.project.dir= | |
2 | +eclipse.preferences.version=1 |
@@ -0,0 +1,4 @@ | ||
1 | +eclipse.preferences.version=1 | |
2 | +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 | |
3 | +org.eclipse.jdt.core.compiler.compliance=1.8 | |
4 | +org.eclipse.jdt.core.compiler.source=1.8 |
@@ -0,0 +1,14 @@ | ||
1 | +# Getting Started | |
2 | + | |
3 | +### Reference Documentation | |
4 | +For further reference, please consider the following sections: | |
5 | + | |
6 | +* [Official Gradle documentation](https://docs.gradle.org) | |
7 | +* [Spring Boot Gradle Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/2.6.3/gradle-plugin/reference/html/) | |
8 | +* [Create an OCI image](https://docs.spring.io/spring-boot/docs/2.6.3/gradle-plugin/reference/html/#build-image) | |
9 | + | |
10 | +### Additional Links | |
11 | +These additional references should also help you: | |
12 | + | |
13 | +* [Gradle Build Scans – insights for your project's build](https://scans.gradle.com#gradle) | |
14 | + |
@@ -0,0 +1,30 @@ | ||
1 | +plugins { | |
2 | + id 'java' | |
3 | + id 'application' | |
4 | +} | |
5 | + | |
6 | +group = 'nanah' | |
7 | +version = '0.0.1-SNAPSHOT' | |
8 | +sourceCompatibility = '1.8' | |
9 | +mainClassName = 'jp.nanah.logconfchk.LogConfCheck' | |
10 | + | |
11 | +configurations { | |
12 | + compileOnly { | |
13 | + extendsFrom annotationProcessor | |
14 | + } | |
15 | +} | |
16 | + | |
17 | +repositories { | |
18 | + mavenCentral() | |
19 | +} | |
20 | + | |
21 | +dependencies { | |
22 | + implementation 'org.slf4j:slf4j-api:1.7.33' | |
23 | + implementation 'ch.qos.logback:logback-core:1.2.10' | |
24 | + implementation 'ch.qos.logback:logback-classic:1.2.10' | |
25 | + implementation 'org.apache.logging.log4j:log4j-core:2.17.1' | |
26 | +} | |
27 | + | |
28 | +test { | |
29 | + //useJUnitPlatform() | |
30 | +} |
@@ -0,0 +1,5 @@ | ||
1 | +distributionBase=GRADLE_USER_HOME | |
2 | +distributionPath=wrapper/dists | |
3 | +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip | |
4 | +zipStoreBase=GRADLE_USER_HOME | |
5 | +zipStorePath=wrapper/dists |
@@ -0,0 +1,234 @@ | ||
1 | +#!/bin/sh | |
2 | + | |
3 | +# | |
4 | +# Copyright © 2015-2021 the original authors. | |
5 | +# | |
6 | +# Licensed under the Apache License, Version 2.0 (the "License"); | |
7 | +# you may not use this file except in compliance with the License. | |
8 | +# You may obtain a copy of the License at | |
9 | +# | |
10 | +# https://www.apache.org/licenses/LICENSE-2.0 | |
11 | +# | |
12 | +# Unless required by applicable law or agreed to in writing, software | |
13 | +# distributed under the License is distributed on an "AS IS" BASIS, | |
14 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
15 | +# See the License for the specific language governing permissions and | |
16 | +# limitations under the License. | |
17 | +# | |
18 | + | |
19 | +############################################################################## | |
20 | +# | |
21 | +# Gradle start up script for POSIX generated by Gradle. | |
22 | +# | |
23 | +# Important for running: | |
24 | +# | |
25 | +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is | |
26 | +# noncompliant, but you have some other compliant shell such as ksh or | |
27 | +# bash, then to run this script, type that shell name before the whole | |
28 | +# command line, like: | |
29 | +# | |
30 | +# ksh Gradle | |
31 | +# | |
32 | +# Busybox and similar reduced shells will NOT work, because this script | |
33 | +# requires all of these POSIX shell features: | |
34 | +# * functions; | |
35 | +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», | |
36 | +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; | |
37 | +# * compound commands having a testable exit status, especially «case»; | |
38 | +# * various built-in commands including «command», «set», and «ulimit». | |
39 | +# | |
40 | +# Important for patching: | |
41 | +# | |
42 | +# (2) This script targets any POSIX shell, so it avoids extensions provided | |
43 | +# by Bash, Ksh, etc; in particular arrays are avoided. | |
44 | +# | |
45 | +# The "traditional" practice of packing multiple parameters into a | |
46 | +# space-separated string is a well documented source of bugs and security | |
47 | +# problems, so this is (mostly) avoided, by progressively accumulating | |
48 | +# options in "$@", and eventually passing that to Java. | |
49 | +# | |
50 | +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, | |
51 | +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; | |
52 | +# see the in-line comments for details. | |
53 | +# | |
54 | +# There are tweaks for specific operating systems such as AIX, CygWin, | |
55 | +# Darwin, MinGW, and NonStop. | |
56 | +# | |
57 | +# (3) This script is generated from the Groovy template | |
58 | +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt | |
59 | +# within the Gradle project. | |
60 | +# | |
61 | +# You can find Gradle at https://github.com/gradle/gradle/. | |
62 | +# | |
63 | +############################################################################## | |
64 | + | |
65 | +# Attempt to set APP_HOME | |
66 | + | |
67 | +# Resolve links: $0 may be a link | |
68 | +app_path=$0 | |
69 | + | |
70 | +# Need this for daisy-chained symlinks. | |
71 | +while | |
72 | + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path | |
73 | + [ -h "$app_path" ] | |
74 | +do | |
75 | + ls=$( ls -ld "$app_path" ) | |
76 | + link=${ls#*' -> '} | |
77 | + case $link in #( | |
78 | + /*) app_path=$link ;; #( | |
79 | + *) app_path=$APP_HOME$link ;; | |
80 | + esac | |
81 | +done | |
82 | + | |
83 | +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit | |
84 | + | |
85 | +APP_NAME="Gradle" | |
86 | +APP_BASE_NAME=${0##*/} | |
87 | + | |
88 | +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |
89 | +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | |
90 | + | |
91 | +# Use the maximum available, or set MAX_FD != -1 to use that value. | |
92 | +MAX_FD=maximum | |
93 | + | |
94 | +warn () { | |
95 | + echo "$*" | |
96 | +} >&2 | |
97 | + | |
98 | +die () { | |
99 | + echo | |
100 | + echo "$*" | |
101 | + echo | |
102 | + exit 1 | |
103 | +} >&2 | |
104 | + | |
105 | +# OS specific support (must be 'true' or 'false'). | |
106 | +cygwin=false | |
107 | +msys=false | |
108 | +darwin=false | |
109 | +nonstop=false | |
110 | +case "$( uname )" in #( | |
111 | + CYGWIN* ) cygwin=true ;; #( | |
112 | + Darwin* ) darwin=true ;; #( | |
113 | + MSYS* | MINGW* ) msys=true ;; #( | |
114 | + NONSTOP* ) nonstop=true ;; | |
115 | +esac | |
116 | + | |
117 | +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | |
118 | + | |
119 | + | |
120 | +# Determine the Java command to use to start the JVM. | |
121 | +if [ -n "$JAVA_HOME" ] ; then | |
122 | + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | |
123 | + # IBM's JDK on AIX uses strange locations for the executables | |
124 | + JAVACMD=$JAVA_HOME/jre/sh/java | |
125 | + else | |
126 | + JAVACMD=$JAVA_HOME/bin/java | |
127 | + fi | |
128 | + if [ ! -x "$JAVACMD" ] ; then | |
129 | + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | |
130 | + | |
131 | +Please set the JAVA_HOME variable in your environment to match the | |
132 | +location of your Java installation." | |
133 | + fi | |
134 | +else | |
135 | + JAVACMD=java | |
136 | + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |
137 | + | |
138 | +Please set the JAVA_HOME variable in your environment to match the | |
139 | +location of your Java installation." | |
140 | +fi | |
141 | + | |
142 | +# Increase the maximum file descriptors if we can. | |
143 | +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then | |
144 | + case $MAX_FD in #( | |
145 | + max*) | |
146 | + MAX_FD=$( ulimit -H -n ) || | |
147 | + warn "Could not query maximum file descriptor limit" | |
148 | + esac | |
149 | + case $MAX_FD in #( | |
150 | + '' | soft) :;; #( | |
151 | + *) | |
152 | + ulimit -n "$MAX_FD" || | |
153 | + warn "Could not set maximum file descriptor limit to $MAX_FD" | |
154 | + esac | |
155 | +fi | |
156 | + | |
157 | +# Collect all arguments for the java command, stacking in reverse order: | |
158 | +# * args from the command line | |
159 | +# * the main class name | |
160 | +# * -classpath | |
161 | +# * -D...appname settings | |
162 | +# * --module-path (only if needed) | |
163 | +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. | |
164 | + | |
165 | +# For Cygwin or MSYS, switch paths to Windows format before running java | |
166 | +if "$cygwin" || "$msys" ; then | |
167 | + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) | |
168 | + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) | |
169 | + | |
170 | + JAVACMD=$( cygpath --unix "$JAVACMD" ) | |
171 | + | |
172 | + # Now convert the arguments - kludge to limit ourselves to /bin/sh | |
173 | + for arg do | |
174 | + if | |
175 | + case $arg in #( | |
176 | + -*) false ;; # don't mess with options #( | |
177 | + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath | |
178 | + [ -e "$t" ] ;; #( | |
179 | + *) false ;; | |
180 | + esac | |
181 | + then | |
182 | + arg=$( cygpath --path --ignore --mixed "$arg" ) | |
183 | + fi | |
184 | + # Roll the args list around exactly as many times as the number of | |
185 | + # args, so each arg winds up back in the position where it started, but | |
186 | + # possibly modified. | |
187 | + # | |
188 | + # NB: a `for` loop captures its iteration list before it begins, so | |
189 | + # changing the positional parameters here affects neither the number of | |
190 | + # iterations, nor the values presented in `arg`. | |
191 | + shift # remove old arg | |
192 | + set -- "$@" "$arg" # push replacement arg | |
193 | + done | |
194 | +fi | |
195 | + | |
196 | +# Collect all arguments for the java command; | |
197 | +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of | |
198 | +# shell script including quotes and variable substitutions, so put them in | |
199 | +# double quotes to make sure that they get re-expanded; and | |
200 | +# * put everything else in single quotes, so that it's not re-expanded. | |
201 | + | |
202 | +set -- \ | |
203 | + "-Dorg.gradle.appname=$APP_BASE_NAME" \ | |
204 | + -classpath "$CLASSPATH" \ | |
205 | + org.gradle.wrapper.GradleWrapperMain \ | |
206 | + "$@" | |
207 | + | |
208 | +# Use "xargs" to parse quoted args. | |
209 | +# | |
210 | +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. | |
211 | +# | |
212 | +# In Bash we could simply go: | |
213 | +# | |
214 | +# readarray ARGS < <( xargs -n1 <<<"$var" ) && | |
215 | +# set -- "${ARGS[@]}" "$@" | |
216 | +# | |
217 | +# but POSIX shell has neither arrays nor command substitution, so instead we | |
218 | +# post-process each arg (as a line of input to sed) to backslash-escape any | |
219 | +# character that might be a shell metacharacter, then use eval to reverse | |
220 | +# that process (while maintaining the separation between arguments), and wrap | |
221 | +# the whole thing up as a single "set" statement. | |
222 | +# | |
223 | +# This will of course break if any of these variables contains a newline or | |
224 | +# an unmatched quote. | |
225 | +# | |
226 | + | |
227 | +eval "set -- $( | |
228 | + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | | |
229 | + xargs -n1 | | |
230 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | | |
231 | + tr '\n' ' ' | |
232 | + )" '"$@"' | |
233 | + | |
234 | +exec "$JAVACMD" "$@" |
@@ -0,0 +1,89 @@ | ||
1 | +@rem | |
2 | +@rem Copyright 2015 the original author or authors. | |
3 | +@rem | |
4 | +@rem Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | +@rem you may not use this file except in compliance with the License. | |
6 | +@rem You may obtain a copy of the License at | |
7 | +@rem | |
8 | +@rem https://www.apache.org/licenses/LICENSE-2.0 | |
9 | +@rem | |
10 | +@rem Unless required by applicable law or agreed to in writing, software | |
11 | +@rem distributed under the License is distributed on an "AS IS" BASIS, | |
12 | +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | +@rem See the License for the specific language governing permissions and | |
14 | +@rem limitations under the License. | |
15 | +@rem | |
16 | + | |
17 | +@if "%DEBUG%" == "" @echo off | |
18 | +@rem ########################################################################## | |
19 | +@rem | |
20 | +@rem Gradle startup script for Windows | |
21 | +@rem | |
22 | +@rem ########################################################################## | |
23 | + | |
24 | +@rem Set local scope for the variables with windows NT shell | |
25 | +if "%OS%"=="Windows_NT" setlocal | |
26 | + | |
27 | +set DIRNAME=%~dp0 | |
28 | +if "%DIRNAME%" == "" set DIRNAME=. | |
29 | +set APP_BASE_NAME=%~n0 | |
30 | +set APP_HOME=%DIRNAME% | |
31 | + | |
32 | +@rem Resolve any "." and ".." in APP_HOME to make it shorter. | |
33 | +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi | |
34 | + | |
35 | +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |
36 | +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" | |
37 | + | |
38 | +@rem Find java.exe | |
39 | +if defined JAVA_HOME goto findJavaFromJavaHome | |
40 | + | |
41 | +set JAVA_EXE=java.exe | |
42 | +%JAVA_EXE% -version >NUL 2>&1 | |
43 | +if "%ERRORLEVEL%" == "0" goto execute | |
44 | + | |
45 | +echo. | |
46 | +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |
47 | +echo. | |
48 | +echo Please set the JAVA_HOME variable in your environment to match the | |
49 | +echo location of your Java installation. | |
50 | + | |
51 | +goto fail | |
52 | + | |
53 | +:findJavaFromJavaHome | |
54 | +set JAVA_HOME=%JAVA_HOME:"=% | |
55 | +set JAVA_EXE=%JAVA_HOME%/bin/java.exe | |
56 | + | |
57 | +if exist "%JAVA_EXE%" goto execute | |
58 | + | |
59 | +echo. | |
60 | +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | |
61 | +echo. | |
62 | +echo Please set the JAVA_HOME variable in your environment to match the | |
63 | +echo location of your Java installation. | |
64 | + | |
65 | +goto fail | |
66 | + | |
67 | +:execute | |
68 | +@rem Setup the command line | |
69 | + | |
70 | +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | |
71 | + | |
72 | + | |
73 | +@rem Execute Gradle | |
74 | +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* | |
75 | + | |
76 | +:end | |
77 | +@rem End local scope for the variables with windows NT shell | |
78 | +if "%ERRORLEVEL%"=="0" goto mainEnd | |
79 | + | |
80 | +:fail | |
81 | +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | |
82 | +rem the _cmd.exe /c_ return code! | |
83 | +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | |
84 | +exit /b 1 | |
85 | + | |
86 | +:mainEnd | |
87 | +if "%OS%"=="Windows_NT" endlocal | |
88 | + | |
89 | +:omega |
@@ -0,0 +1,1 @@ | ||
1 | +rootProject.name = 'LogConfigTester' |
@@ -0,0 +1,112 @@ | ||
1 | +package jp.nanah.logconfchk; | |
2 | + | |
3 | +import java.io.File; | |
4 | +import java.util.ArrayList; | |
5 | +import java.util.List; | |
6 | + | |
7 | +import javax.xml.parsers.DocumentBuilder; | |
8 | +import javax.xml.parsers.DocumentBuilderFactory; | |
9 | + | |
10 | +import org.slf4j.Logger; | |
11 | +import org.slf4j.LoggerFactory; | |
12 | +import org.w3c.dom.Document; | |
13 | + | |
14 | +import jp.nanah.logconfchk.output.BaseLogger; | |
15 | +import jp.nanah.logconfchk.output.Log4jLogger; | |
16 | +import jp.nanah.logconfchk.output.LogbackLogger; | |
17 | + | |
18 | +public class LogConfCheck { | |
19 | + | |
20 | + private static final Logger logger = LoggerFactory.getLogger(LogConfCheck.class); | |
21 | + | |
22 | + public void logoutAll(String path, int count, int interval){ | |
23 | + File[] files = null; | |
24 | + | |
25 | + File file = new File(path); | |
26 | + if (file.isDirectory()) { | |
27 | + files = file.listFiles(); | |
28 | + } else { | |
29 | + files = new File[]{file}; | |
30 | + } | |
31 | + | |
32 | + List<BaseLogger> loggerList = new ArrayList<BaseLogger>(); | |
33 | + loggerList.add(new LogbackLogger()); | |
34 | + loggerList.add(new Log4jLogger()); | |
35 | + | |
36 | + //ファイル1つずつの環境にする | |
37 | + for (File f : files) { | |
38 | + try { | |
39 | + Document doc = loadXmlFile(f); | |
40 | + | |
41 | + if (doc == null) { | |
42 | + continue; | |
43 | + } | |
44 | + | |
45 | + for (BaseLogger bl : loggerList) { | |
46 | + if (bl.isTarget(doc)) { | |
47 | + bl.setConfigure(f); | |
48 | + bl.logging(f, doc); | |
49 | + } | |
50 | + } | |
51 | + //List<String> lognames = getLoggerNames(file, doc); //setLoggingFile(doc); | |
52 | + | |
53 | + //loggingAll(file, doc, lognames); | |
54 | + } catch (Throwable th) { | |
55 | + logger.warn("処理異常発生", th); | |
56 | + } | |
57 | + } | |
58 | + } | |
59 | + | |
60 | + /** | |
61 | + * ログ出力設定ファイル(XML)を読み込んで返す。 | |
62 | + * @param file | |
63 | + * @return | |
64 | + */ | |
65 | + private Document loadXmlFile(File file) { | |
66 | + if (file.isDirectory()) { | |
67 | + return null; | |
68 | + } | |
69 | + if (file.getName().endsWith(".xml") == false) { | |
70 | + return null; | |
71 | + } | |
72 | + | |
73 | + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); | |
74 | + try { | |
75 | + dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); //DTDを無視する | |
76 | + DocumentBuilder builder = dbf.newDocumentBuilder(); | |
77 | + Document document = builder.parse(file); | |
78 | + //logger.info("ファイル読み込み正常: " + file.getAbsolutePath()); | |
79 | + return document; | |
80 | + } catch (Throwable th) { | |
81 | + logger.error("設定ファイル読み込み異常 (path=" + file.getAbsolutePath() + ")"); | |
82 | + th.printStackTrace(); | |
83 | + } | |
84 | + | |
85 | + return null; | |
86 | + } | |
87 | + | |
88 | + /** | |
89 | + * 起動引数 | |
90 | + * [0] ログ設定ファイルのあるフォルダまたはファイル | |
91 | + * [1] 出力回数(省略可能) | |
92 | + * [2] 1回出力後の待ち時間(msec) (省略可能) | |
93 | + * @param args | |
94 | + */ | |
95 | + public static void main(String[] args){ | |
96 | + if (args.length == 0) { | |
97 | + System.out.println("Argument is none!"); | |
98 | + System.out.println("java -jar logconfchk.jar [LogConfig.xml]"); | |
99 | + System.out.println("java -jar logconfchk.jar [LogConfig.xml] [count]"); | |
100 | + System.out.println("java -jar logconfchk.jar [LogConfig.xml] [count] [interval(msec)]"); | |
101 | + return; | |
102 | + } | |
103 | + logger.info("=== START ==="); | |
104 | + String path = args[0]; | |
105 | + int count = (args.length > 1) ? Integer.parseInt(args[1]) : 1; | |
106 | + int interval = (args.length > 2) ? Integer.parseInt(args[2]) : 0; | |
107 | + | |
108 | + LogConfCheck app = new LogConfCheck(); | |
109 | + app.logoutAll(path, count, interval); | |
110 | + } | |
111 | + | |
112 | +} |
@@ -0,0 +1,70 @@ | ||
1 | +package jp.nanah.logconfchk.output; | |
2 | + | |
3 | +import java.io.File; | |
4 | +import java.net.URL; | |
5 | +import java.util.ArrayList; | |
6 | +import java.util.List; | |
7 | + | |
8 | +import org.slf4j.Logger; | |
9 | +import org.slf4j.LoggerFactory; | |
10 | +import org.w3c.dom.Document; | |
11 | +import org.w3c.dom.Element; | |
12 | +import org.w3c.dom.NodeList; | |
13 | + | |
14 | +import ch.qos.logback.classic.LoggerContext; | |
15 | +import ch.qos.logback.classic.joran.JoranConfigurator; | |
16 | + | |
17 | +public class BaseLogger { | |
18 | + | |
19 | + private static final Logger logger = LoggerFactory.getLogger(BaseLogger.class); | |
20 | + | |
21 | + public boolean isTarget(Document doc) { | |
22 | + return false; | |
23 | + } | |
24 | + | |
25 | + public void setConfigure(File file) { | |
26 | + } | |
27 | + | |
28 | + public void logging(File file, Document doc) { | |
29 | + } | |
30 | + | |
31 | + //以下はユーティリティメソッド的に使う。 | |
32 | + | |
33 | + | |
34 | + protected List<String> getLoggerNames(Document doc, String logNameTag){ | |
35 | + List<String> loggerNames = new ArrayList<String>(); | |
36 | + | |
37 | + Element rootNode = doc.getDocumentElement(); | |
38 | + NodeList loggerNodes = rootNode.getElementsByTagName(logNameTag); | |
39 | + | |
40 | + for (int i = 0; i < loggerNodes.getLength(); i++) { | |
41 | + Element loggereElem = (Element) loggerNodes.item(i); | |
42 | + loggerNames.add( loggereElem.getAttribute("name") ); | |
43 | + } | |
44 | + | |
45 | + return loggerNames; | |
46 | + } | |
47 | + | |
48 | + | |
49 | + public static void setConfigureForLogback(File file) { | |
50 | + try { | |
51 | + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); | |
52 | + context.reset(); | |
53 | + JoranConfigurator configurator = new JoranConfigurator(); | |
54 | + configurator.setContext(context); | |
55 | + | |
56 | + if (file != null) { | |
57 | + URL configUrl = new URL("file:" + file.getAbsolutePath()); | |
58 | + logger.info("logconffile: {}", "file:" + file.getAbsolutePath() ); | |
59 | + configurator.doConfigure(configUrl); | |
60 | + } | |
61 | + | |
62 | + } catch (Throwable th) { | |
63 | + th.printStackTrace(); | |
64 | + } | |
65 | + } | |
66 | + | |
67 | + public static void setConfigureForLog4j(File file) { | |
68 | + //comming soon | |
69 | + } | |
70 | +} |
@@ -0,0 +1,22 @@ | ||
1 | +package jp.nanah.logconfchk.output; | |
2 | + | |
3 | +import java.io.File; | |
4 | + | |
5 | +import org.w3c.dom.Document; | |
6 | + | |
7 | +public class Log4jLogger extends BaseLogger{ | |
8 | + | |
9 | + public boolean isTarget(Document doc) { | |
10 | + boolean b = doc.getDoctype().getName().contains("log4j"); | |
11 | + return b; | |
12 | + } | |
13 | + | |
14 | + public void setConfigure(File file) { | |
15 | + setConfigureForLog4j(file); | |
16 | + } | |
17 | + | |
18 | + public void logging(File file, Document doc) { | |
19 | + | |
20 | + } | |
21 | + | |
22 | +} |
@@ -0,0 +1,43 @@ | ||
1 | +package jp.nanah.logconfchk.output; | |
2 | + | |
3 | +import java.io.File; | |
4 | +import java.util.List; | |
5 | + | |
6 | +import org.slf4j.Logger; | |
7 | +import org.slf4j.LoggerFactory; | |
8 | +import org.w3c.dom.Document; | |
9 | + | |
10 | +public class LogbackLogger extends BaseLogger{ | |
11 | + | |
12 | + private static final Logger logger = LoggerFactory.getLogger(LogbackLogger.class); | |
13 | + | |
14 | + public boolean isTarget(Document doc) { | |
15 | + boolean b = doc.getDoctype().getName().contains("logback"); | |
16 | + return b; | |
17 | + } | |
18 | + | |
19 | + public void setConfigure(File file) { | |
20 | + setConfigureForLogback(file); | |
21 | + } | |
22 | + | |
23 | + public void logging(File file, Document doc) { | |
24 | + Exception warnEx = new RuntimeException("警告時の例外情報です。"); | |
25 | + Exception errorEx = new RuntimeException("異常時の例外情報です。"); | |
26 | + List<String> names = getLoggerNames(doc, "logger"); | |
27 | + String baseMessage = "###[" + file.getName() + "]###"; | |
28 | + | |
29 | + for (String name : names) { | |
30 | + if (name == null) { | |
31 | + name = this.getClass().getCanonicalName(); | |
32 | + } | |
33 | + Logger log = LoggerFactory.getLogger(name); | |
34 | + | |
35 | + log.trace("{}[{}][TRACE LEVEL]{}", baseMessage, name, "トレースログです"); | |
36 | + log.debug("{}[{}][DEBUG LEVEL]{}", baseMessage, name, "デバッグログです"); | |
37 | + log.info ("{}[{}][INFO LEVEL]{}", baseMessage, name, "情報ログです"); | |
38 | + log.warn ("{}[{}][WARN LEVEL]{}", baseMessage, name, "警告ログです", warnEx); | |
39 | + log.error("{}[{}][ERROR LEVEL]{}", baseMessage, name, "異常ログです", errorEx); | |
40 | + } | |
41 | + } | |
42 | + | |
43 | +} |
@@ -0,0 +1,13 @@ | ||
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<!DOCTYPE logback> | |
3 | +<configuration> | |
4 | + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | |
5 | + <encoder> | |
6 | + <pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} %-5level %logger{36} - %m%n</pattern> | |
7 | + </encoder> | |
8 | + </appender> | |
9 | + | |
10 | + <root level="DEBUG"> | |
11 | + <appender-ref ref="STDOUT" /> | |
12 | + </root> | |
13 | +</configuration> | |
\ No newline at end of file |