Bien logger ses mods
-
new LoggerManager(event.getModLog(), Paths.get("modid.txt"));Pourquoi ne peut-on pas changé le .txt en .log, par exemple?
-
@‘Superloup10’:
new LoggerManager(event.getModLog(), Paths.get("modid.txt"));Pourquoi ne peut-on pas changé le .txt en .log, par exemple?
On peut mais c’est mieux d’utiliser un format reconnu par 80% des OS et qui pourra être ouvert facilement par les joueurs.
-
Bah, les fichiers de config en .cfg ne sont pas ouvert par tout les OS, non plus.
-
@‘Superloup10’:
Bah, les fichiers de config en .cfg ne sont pas ouvert par tout les OS, non plus.
Ouais mais ça c’est pas moi qui les ai faits

-
Une question, je suis entrain de coder le fichier de log et j’ai une erreur sur cette ligne:
writer.write(record.getMessage("<" + getDate() + "> [" + record.getLevel().getLocalizedName() + "] " + record.getMessage()) + "\n");J’en ai déduis que cette ligne ne fonctionne que pour les mods Minecraft, non?
Donc que suis-je sensé mettre à la place?
-
@Superloup10 : Tu as quoi comme erreur ? Normalement ça ne dépend pas de Minecraft.
@EclipseOnFire :
Pourquoi as-tu utiliser un BufferedWriter et pas un PrintWriter ?
Pourquoi le constructeur de ton loggerManager est en public ? Alors qu’apparemment de la manière dont tu l’a écrit, c’est un singleton ? Si tu fais des accès concurrentiels vers ton loggers, il va crash et faire planter tout le mod.Comment logger dans plusieurs fichiers ? (avec ta méthode on ne peut pas :P)
TOUS les OS gèrent les .log et les .cfg.
Je trouve qu’il y a plus simple que ce que tu fais par moment.
Je vais tenter de proposé un tutoriel similaire au tiens, mais avec ma vision des choses quand j’aurais le temps
En ce moment je suis pas mal occupé ^^ En dehors de mon taff, je suis entrain de modifier une application pour qu’elle respecte le pattern-design MVC et c’est pas gagné xD Puis il faut aussi que je m’occupe de cette histoire de balise de traduction pour le forum

En réalité je suis incapable de faire des tutos pour forge, car je n’ai pas encore vraiment mis les pieds dans l’API.
Je crée juste une gamme d’outils pour les moddeurs minecraft qui se veut indépendante de toute API.
Mais logger l’exécution de son code ne relève pas de l’API forge
-
Eclipse me dit:
The method getMessage() in the type LogRecord is not applicable for the arguments (String) -
Une fonction get ne prend pas d’arguments, sauf peut-être un identifiant ( Numérique ) normalement.
-
getMessage() ne prend pas de paramètre.
Je ne comprend pas ce que tu veux faire exactement. Quel message veux-tu stocker ?
pourquoi tu n’utilise pas LoggerManager.instance.getLogger().info(“ton_message_d’information”) ?
C’est très crade comme notation mais je fais ce que je peux avec ce qui est marqué dans le tuto ^^Non Gugu42, sinon on aurait “The method getMessage(int) in the type LogRecord is not applicable for the arguments (String)”
-
Je parle en général, non pas dans ce cas précis

Parfois, des méthodes get prennent un int, mais en général, pas ce cas précis

-
Autant pour moi, j’ai mal compris désolé

-
Je me doutais que getMessage ne prends pas de paramètre donc j’en déduis que le tuto comporte une erreur à ce niveau là.
-
Oui, j’ai testé, le tutoriel comporte bien une erreur

@EclipseOnFire voulait surement voir si on suivait
EDIT : http://www.minecraftforgefrance.fr/showthread.php?tid=496&pid=5358#pid5358
Voila ce que j’ai fais, les sources sont sur github donc si tu veux jeter un oeil @EclipseOnFire, jette un oeil sur ma classe LoggerManager
C’est pas commenté, mais normalement il n’y a rien de compliquer a comprendre sauf peut-être la manière dont j’implémente le coté bufferisé de ma classe TerminalOutput
Mais bon ça m’évite de lancer le vidage du tampon dans le thread graphique et de gérer les accès concurentiels au contenu du Terminal ^^ -
Oui je viens de voir où est l’erreur. C’est bon c’est corrigé, j’ai dû faire une faute de frappe lorsque j"ai transcrit mon code sur le forum.
@Superloup
Change la ligne en :writer.write(record.getMessage() + "<" + getDate() + "> [" + record.getLevel().getLocalizedName() + "] " + record.getMessage() + "\n");Merci de m’avoir signalé le bug, c’est corrigé !
@Blackout
Pourquoi as-tu utiliser un BufferedWriter et pas un PrintWriter ?
Heu parce que là où j’ai développé ce Logger, j’avais besoin d’un BufferedWriter. En plus il me semble avoir lu que les Buffered sont plus rapides et qu’ils sont adaptés à Java NIO2 donc bon…
Pourquoi le constructeur de ton loggerManager est en public ? Alors qu’apparemment de la manière dont tu l’a écrit, c’est un singleton ? Si tu fais des accès concurrentiels vers ton loggers, il va crash et faire planter tout le mod.
Heu… Tu peux me montrer un exemple s’il te plait ? Ce sera plus clair pour moi !

Comment logger dans plusieurs fichiers ? (avec ta méthode on ne peut pas)
Rien n’empêche d’avoir plusieurs fichiers de configuration, il suffit juste de créer une nouvelle instance de LoggerManager avec un autre fichier et avec le même Logger. Il suffira ensuite de conserver un seul Logger qui loggera dans tous les autres fichiers, celui qui sera en instance quoi… En plus j’ai voulu faire un Logger simple, pas trop complexe.
TOUS les OS gèrent les .log et les .cfg.
Oui tu as raison, mais je ne parle pas de l’encodage ni du format, mais de l’extension. Sous 90% des ordis tu double clic sur un .txt et ça s’ouvre. Essaye sur un .cfg ou un .log, il faudra définir un programme par défaut. Voilà pourquoi. Sinon tu peux le modifier ya pas de problème ^^.
Au niveau des petites erreurs tu voulais sûrement parler de la suppression du fichier alors que je pourrais simplement mettre le writer en mode “write” ?
J’ai choisi ça car certains OS ne donnent pas directement la permission au programme d’écrire le fichier. Donc, en créant/supprimant le fichier dés le début, on s’assure d’avoir les permissions. S’il n’y en a pas, ça bugge à cet endroit là, et pas au niveau de l’écriture du fichier. -
PrintWriter sert a écrire des chaînes de caractères, BufferedWriter sert a écrire des octects de manière générale.
Ici on n’écrit que des caractères imprimables. Les 2 sont toute aussi performantes, si ce n’est la signification de ton code.
Quand tu lis le code de quelqu’un et que tu vois un PrintWriter, tu sais qu’il ne s’agit que de chaînes de caractères imprimables
Pour les accès concurrentiels, renseignes toi sur le multithreading en java

Pour les extension, il faut que les gens apprennent à s’en servir
tu ne codes pas pour des grand-mères de 90 ans qui ne se mettront jamais a l’informatique. un fichier de log c’est un .log, et indique le contenu du fichier qui généralement n’est pas créé par l’utilisateur, mais de manière automatique. Dans ce cas la, tu peux modifier tout tes fichiers plain-text en .txt, même tes pages php et html
Enfin bref, ça n’a que peu d’importance 
le gros probleme de ta version c’est que si l’écriture échoue, tu ne loggeras rien du tout !
-
@‘Blackout’:
PrintWriter sert a écrire des chaînes de caractères, BufferedWriter sert a écrire des octects de manière générale.
Ici on n’écrit que des caractères imprimables. Les 2 sont toute aussi performantes, si ce n’est la signification de ton code.
Quand tu lis le code de quelqu’un et que tu vois un PrintWriter, tu sais qu’il ne s’agit que de chaînes de caractères imprimables
Pour les accès concurrentiels, renseignes toi sur le multithreading en java

Pour les extension, il faut que les gens apprennent à s’en servir
tu ne codes pas pour des grand-mères de 90 ans qui ne se mettront jamais a l’informatique. un fichier de log c’est un .log, et indique le contenu du fichier qui généralement n’est pas créé par l’utilisateur, mais de manière automatique. Dans ce cas la, tu peux modifier tout tes fichiers plain-text en .txt, même tes pages php et html
Enfin bref, ça n’a que peu d’importance 
le gros probleme de ta version c’est que si l’écriture échoue, tu ne loggeras rien du tout !
Ah d’accord ^^. Bah c’est sûr que c’est un peu mieux oui

Ah oui je vois… Je pensais pas que ça pouvait se faire pour un mod. Il me suffirait donc de déclarer l’écriture de fichier “synchronized” ?
Seulement les entités Minecraft ne devraient-t-elles pas être synchronized puisque les entités sont actualisées à chaque tick en plus d’être modifiées par les mods et les events Forge ?Oui je suis d’accord, mais je dis pas qu’on peut pas le changer hein…
Si l’écriture échoue, je ne logge rien dans mon fichier log, c’est sûr, mais je logge quand même dans la console qui est transcrite dans les logs de Forge et dans la console du launcher (s’il est resté ouvert pendant que MC s’exécute).
-
question: une faut faire ce pour chaque mod? ou on peut créer un mod pour tout notre modpack?
